一通りマクロを作ってみた感想

  • Option Explicit
    • 明示的な変数の宣言を強制する為の呪文。Perlのuse strict;相当。非常に重要なので、必ず冒頭で宣言すべし。
  • 配列とコレクション
    • VBAで配列を使う場合、動的配列で宣言してからReDim/Preserveで要素数を拡大しながらループを回すのが定石らしい。どうしようもなく気持ち悪くてなじめなかったのだが、Collectionを使えば普通の配列として扱えるようだ。パフォーマンスを測定すると配列よりも遅いようだが、きっと問題になることはあるまい。
  • 連想配列
    • コレクションでも連想配列的な使い方が可能だが、keyだけを取り出すのが出来なかったりで使い勝手がよくない。連想配列が必要ならScripting.Dictionaryで連想配列を使うのがよいだろう。
  • 正規表現
    • 何故かVBAでは使えないと思いこんでいたら、フルスペックの正規表現が使えたので驚いた。マッチした文字列の取り出し方に癖があって戸惑ったけど、出来ると分かれば何とかするだけである。
  • 引数の渡し方(ByVal/ByRef)
    • VBAでは参照渡しがデフォルトのようで、明示的に指定しないとByRefの扱いになってしまう。スコープ外の変数にアクセス出来る状態は何とも気持ち悪いので、やむを得ない場合を除きByValを使うことに。
  • 返値
    • 関数の最後で「関数名 = 返値」と宣言するのが作法のようだが、なんか違和感を感じる。Perlの癖で「関数内で最後に評価された値」だと思いこむ時があるので要注意。
  • 集計ロジック(コントロール・ブレイク)
    • 例えば、年次・月次・アイテム毎に集計する場合に使うロジックなのだが、いままで「SQLでいいじゃん!」といって避けてました。別にそれでいいのだけど、せっかくなのでこれを機に勉強してみた。最初と最後のケアに気をつけて、条件分岐をちゃんと設定すればなんとかなるのかな。必要に応じて思い出せる程度にはしておきたいところ。
  • VBE
    • VBAを書くためのエディタだけど、高機能なところがあってビックリする反面、基本的な機能が貧弱で非常に使いにくい。せめて、タブとスペースの制御コードを表示するくらい出来て欲しいのだけど...あと、黒地に白字とか。
  • デバッグ
    • PerlのData::Dumper的なデバッグ方法が分からなくて当初戸惑ったけど、イミディエイトウィンドウとローカルウィンドウによるプレビューを使えば概ねなんとかなる。でも、最大200件までと言う制限が結構邪魔である。
  • for/next vs. for each/next
    • 個人的にはfor each/nextが自然で多用するのだけど、Variant型のダミー変数が大量に必要になるのがちょっと困る。a,b,c,...とかi,j,k,...みたいなのがたくさん残ってしまうけど、気にしたら負け。
    • どうしようもなく違和感を感じると思ったら、やっと原因が分かった。Perlのforeachループの場合、nextは次のループに進むを意味する訳で、VBAでとうとうするのはcontinueらしい。next if STATEMENT形式に慣れてしまっているので、代替手段が欲しいところである。
  • グラフ
    • Webで調べると、Excel 2003以前の古い方法とExcel 2007以降の新しい方法が混在していて、どれがよいのかよく分からない。基本的には、まずはオブジェクトを作って、そのあとで細かいところを調整する方針でよいのだろうかね。