Road of Excel Macro
昨日に続いてExcelの話。
ちょっとした定型作業の為にツールを作ったりスクリプトを書いたりすることが多い。 これが自宅なら言語の選択肢は多いのだが、仕事だと、他の人が使うことも考慮しなきゃいけない場合はExcelのVBAの一択だったりする。
で、このExcelのVBAだが、俺は結構クラスモジュールを使う。 いやもう 「結構」 がむしろ控えめな表現になるぐらいの勢いで使う。
- パッケージが無い。
- インターフェースの継承しかできない。
- コンストラクタに値を渡せない。
などと割と致命的な問題を抱えてはいるが、それでもやっぱりクラスにした方が便利な場合が多いからだ。
例えば一覧形式で入力された値をチェックする場合、俺がやるのはこんな感じ。
-
チェックのインターフェースを定義するクラスを作る。
-
このインターフェースを実装するチェッククラスを作る。
正規表現、値の範囲、日付、等々、各列の内容に応じたチェック処理を、同じ呼び出しで適用できるようにする。
-
各列用のチェッククラスのインスタンスを、列の並びと同じ順に詰めたリストを作るためのファクトリークラスを作る。
各列で実際に適用する正規表現などは設定シートに持たせ、その情報でインスタンスを作るようにする。
-
ファクトリークラスにチェックリストを作らせ、各行に適用するコントローラーを作る。
「作る」 と書いたが、実際には過去に作ったものを、設定シートを差し替えて使い回しているだけだったりする。 何かと使い回しが効いて、自己満足度は高い。
が、これを渡した人たちからの評判は、あまり宜しく無い。
「クラスがたくさん使われてて、難しいです」
「クラス、使わない?」
「使ったことないです」
「そうかぁ… 便利なんだけどなぁ…」
「ステップ実行してみたんですけど、あっちこっちの小さい処理に飛んで、何やってるのか解りません」
「いや、小さい処理なんだから、何やってるかは解るでしょ」
「一つ一つは解るんですけど、その処理の位置付けというか、なんか全体が見えないというか」
「あー、それはそうかも」
「あと、コメントが全然無いです」
「それはすまん」
だいたいいつもこんな感じ。
コメントを書かないのは俺が悪いが、クラスモジュールに罪はない。 使った方が便利になることが多いし、躊躇わずに使って欲しいものだが、使わないと便利さも実感できなくて、だから使われないままなんだよな。 うーん…。
まあ、俺が心配することじゃないか。