• このエントリーをはてなブックマークに追加

Excel VBAのステップ数を数えるツールを探そうとおもったけれども、勉強のために自作してみる。

スポンサードリンク

ステップ数を数える方法について

ソースコードから以下の情報を得たい。

  • 全体のステップ数
  • 実行ステップ数
  • コメント行
  • 空白行

こんな出力結果を得たい。


--------------------------
  FileName    Exxecute
--------------------------
 hogehoge.cls       10
 hugahuga.bas       10
--------------------------
 Sum                20
--------------------------

サンプルを探してみた。以下のサイトのコードが良さそうだ。

テンプレートエンジンをつかってみる

テンプレートエンジンについて

テンプレートエンジンとは、データとテンプレートからドキュメントを作成するもの。

VBAで利用できるテンプレートエンジンは、「Mini Templator」が唯一の選択肢のようだ。

Mini Templatorについて

Mini TemplatorはHTML用のテンプレートエンジン。 VBAだけではなくて、Java, PHPでもつかえる模様。オープンソース。

上記サイトからVBA用のファイル一式をダウンロード。 なかにあるMiniTemplator.clsをインポートする。

  • MiniTemplator_vbasic.zip
    • MiniTemplator.cls

ドキュメントは以下。

Mini Templatorのつかいかた

キホンは以下の4ステップ

  1. テンプレートエンジン生成
  Dim templator As New MiniTemplator
  1. テンプレート読み込み
 templator.ReadTemplateFromFile STEPCOUNTE_TEMPLATE_PATH
  1. データ入力

3.1 変数代入 3.2 ブロック代入

    templator.SetVariable "filename", vbcComp.Name
    templator.SetVariable "execute", vbcLine
    templator.SetBlock "file"
  1. データを文字列 or ファイルに出力
  Debug.Print templator.GenerateOutputToString

テンプレートを用意

こんな感じでテンプレート用意。

-------------------------
 FileName}    Execute
-------------------------
 ${filename}    ${execute}
-------------------------
 Sum    ${execute}
-------------------------

コード

出力結果

ずれずれ・・・もともとがHTMLようなので、フォーマット出力なんて考えてないようだ。

テキスト出力はつらい。

-------------------------
 FileName}    Execute
-------------------------
 ThisWorkbook    39
 Sheet2    0
 Calc    3
 Calc_spec    11
 FileManager_spec    47
 InlineRunner    112
 MiniTemplator    608
 SpecDefinition    62
 SpecExpectation    164
 SpecRunner    4
 SpecSuite    42
 StepCounter    64
 FileManager    129
-------------------------
 Sum    1285
-------------------------

printf的なものはないかな

C言語でのprintfにあたる機能がVBAにないものか、と探したらあった。

このツールが良さそうだ。

上記からダウンロードして、PrintF.basをインポート。

使い方も、C言語のprintfと同じ。

コード

出力結果

完璧、素晴らしい。

-----------------------
 FileName      Execute 
-----------------------
 ThisWorkbook       39 
 Sheet2              0 
 Calc                3 
 Calc_spec          11 
 FileManager_spec   47 
 InlineRunner      112 
 MiniTemplator     608 
 mdlPrintF         282 
 SpecDefinition     62 
 SpecExpectation   164 
 SpecRunner          4 
 SpecSuite          42 
 StepCounter        51 
 FileManager       129 
-----------------------
 Sum              1554 
-----------------------