シリーズ仕様書からプログラムソースを生成する方法のつづきです。
前々回、マクロを公開し、前回、そのマクロをExcelに貼り付けて、生成させる方法について書きました。今回は、その前々回公開したマクロの説明です。
■マクロの関数の概要
このマクロには、3つのサブルーチン(Sub)または、ファンクション(function)があります。
(1)ボタンから起動されるサブルーチン(shiyoToFile)
(2)雛形ファイルと仕様書を読み込んで、自動生成する(makefile)
(3)制御内容ごとの処理(chgTagToStr)
(1)から、(2)が呼び出され、(2)から(3)が呼び出されます。
(1)は、仕様書によっては、書き換わります。
以下、それぞれの関数を説明します。
■(1)ボタンから起動されるサブルーチン(shiyoToFile)
ここでは、以下の処理をします。
(1-1)前処理
(2)のプログラムは、固定化するため、
(2)で処理できるようにするため、
前処理を行う
(1-2)(2)のプログラムを呼び出す
(1-3)後しまつ
(1-1)でシートやファイルを作成したら、
削除します。
今回は、(1-1)、(1-3)が必要ないので、(1-2)だけ行います。
Call makefile(雛形ファイル名,シート名,出力ファイル名)
です。
■(2)雛形ファイルと仕様書を読み込んで、自動生成する(makefile)
makefile(雛形ファイル名,シート名,出力ファイル名)というカタチの
サブルーチンです。内容は、以下のとおり
(2-1)雛形ファイルを読み込みます
indataに、ファイル内容を全部入れます。
(2-2)書き出し内容を作成します
・indataの開始ポイント(str_pos)を1、
(VBAにおいて、文字列の先頭は0でなく、1)
出力内容を(outdata)を空文字("")として
・制御内容のタグ$#$があるかないかチェックします **
・あったら、
前回のタグの終わりから、今回のタグまでoutdataにセットし、
制御内容部分を切り出し
chgTagToStrで制御内容を処理します
→この内部でoutdata(書き出し内容)をセットします
→chgTagToStrは、次の開始ポイント(str_pos)を返します
**に戻ります
・**のループが終わったら、残り部分をoutdataにセットします
(2-3)作成データを書き出します
・まず、書き出しファイルがあったら削除し
ここが、変な風になっているのは、<>っていうのを書くと、
変換しないといけないので、面倒だからというだけで深い意味はないです
・書き出します
■(3)制御内容ごとの処理(chgTagToStr)
chgTagToStr(制御内容,次の開始ポイント候補,仕様書のシート名)というカタチの
ファンクションです。返り値は、次の開始ポイントです。
内容は、制御内容が、それぞれのタグだったら、それにあった内容をします。
こんなかんじ
(3-1)制御コードが"REPEND"だったら、
仕様書チェック行(lpgyo)を次の行にして(1足す)
そこの行の指定箇所が空白だったら
ループ終わりなので、引数の次の開始ポイント候補を返す
そうじゃない(まだ行続く場合)
ループするため、ループ開始ポイント(lpstr_pos )を返す
(3-2)制御コードが"REP"だったら、
仕様書チェック行(lpgyo)を取得
ループするためのループ開始ポイント(lpstr_pos)を、セット
→この制御コードの終わりの次の文字
=次の開始ポイント候補にする
引数の次の開始ポイント候補を返す
(3-3)制御コードが"CELL"だったら、
指定箇所を、出力データ(outdata)に追加して
引数の次の開始ポイント候補を返す
(3-4)制御コードが"KETA"だったら、
現在行の指定桁を、出力データ(outdata)に追加して
引数の次の開始ポイント候補を返す
*"REPEND"を先に聞き、"REP"をあとに聞く理由は、
先に"REP"を聞いてしまうと、そこに"REPEND"も
引っかかってしまうからです("REP "で聞けばいいんだけどね)
**今後、ここに条件文IFが追加される予定です
こんなかんじです。
人に、「同じプログラムを使えば枯れるから」とかいっておきながら、
実はこのプログラム、よく作るんだけど、いつも即興で作ってしまっていて、
今回も、即興でつくったので、バグとかもあるかも。。
あったらごめんなさい。
では、今回はここまで。