2015年4月23日木曜日

Excel VBA 変数一覧表を作る

【一覧表にしてみると】
その時々の思いつきで変数名や、関数名を振ってしまっていたが、リリース前に全体的な統一性、整合性、同名の型違い、プリフィックス(一文字か二文字の)の有無などチェックする目的で書き出してみた。最初はExcelのシートに貼り付けて、一行ずつ消しての手作業だったが、プログラムを眺めるという観点ではなく、異なる観点で見直すことが出来て有用だった。(一年前のこと)
バージョンの更新を重ねたので、再度やってみることにした。

【変数一覧表を作成するマクロ】
変数一覧表を作成するマクロを見つけたので使ってみたが、途中でエラー停止したことや、変数の型も、引数についても同様に知りたいので、改造することにした。
ところが、手を加えているうちにはまってしまった。それというのも、元の作者が「・・・。こうすれば、簡単に変数の値を共有できます。」という流儀で広域変数ばかりで作ってあり、私とは真逆の考えの方。

【変数一覧表を作成するマクロを改造】
フィルタ部分はそのまま使用させてもらうつもりだったが、関数の引数部分も取り出す機能を入れ始めた頃から削る部分と、追加部分が入り交じっておかしくなってしまい、丸一日がかりになるはめに。オリジナルにあった、関数名との対応表を作成する部分は削った。

【出来たマクロは】
自分の記述法は、変数名、関数名の行が、二行に分かれたり一行にコロンで区切り、複数書いたりするケースが無いので、対応はしなかった。
左端から順に数えて進めるというオリジナルの方法には従ったが、もっとスマートな方法がありそうな気がする(パターンを登録して、それを見つけるとか) 検出キーワードは、
  • Sub, Function,
  • ByRef, ByVal
  • Dim, Public
 以下の定数関係は無視(定義モジュールに集中しているので、コードをみれば済むこと)
  • Enum, Type, Const
【使用結果】
一瞬で書き出しが終わり、シート上、手作業で同名をカウントする式を貼り付けた後、重複するセルを削り、変数一覧表が出来上がる。
今回リリースしたマクロの書き出し結果は
  • 広域変数16個(条件定義の配列や動作モードや動作ステップ)を除いて
  • 269個有り、重複を削除したら107個残った
  • 一番多いもので30回登場(通信結果を受ける変数)
  • 一回限りの登場が 62 個
ざっとみたところで、同じ目的での一字違いとか、同名で型違いとか、いくつか見つかる。Variant は二つ。一回限りが多いということは、同じ処理を何度も書いていなから、とも言える。

【変数名・自分流】
自分なりの名前付けルールを厳密にしているわけではないが、その場限りのカウント等の汎用的な変数は抽象的なものでもいいが、後から見て、操作している内容まで伝わるような具体的な名前にした方がいい。種類を減らそうとか、短くしようとかにこだわりすぎないこと。