VBA プログラムでよく使ったオブジェクト・メソッド・プロパティ・定数
こんなキャンペーンをやっているので、記事を起こしてみました。
Windows/Office武勇伝 <Surface Proが当たる! 開発者グループOPENキャンペーン>
自分が作成または修正した Office のマクロというか VBA プログラムで印象に残っているものを三つ程挙げます。
まず一つ目は、某サービス業の売上日報のテンプレートを VBA プログラム付きで作成したことです。
その企業はサービスを受け付ける窓口が複数存在していて、一日の終りに各窓口の売上を日報(*.xls)のシート毎に記録した後、まとめのシートに合計額を集計していました。
最初は Excel シートのセルに関数を埋め込んでいましたけど、各セルに同じような関数をコピペしていたのと、日報を記録する人が関数の入ったセルを上書きしてしまう恐れがあったので、全て VBA プログラム化しました。
まあ、よくある話だと思います。
八年ぐらい前に作成したものなので、どんなコードを書いたのか忘れていましたが、幸い私の PC に当時のプログラムが残っていたので、どんなメソッドや定数を使ったのかザッと並べてみます。
- オブジェクト
- Application
- Sheets
- Range
- メソッド
- Select
- Copy
- PasteSpecial
- ClearContents
- プロパティ
- Value
- CutCopyMode
- 定数
- xlValues
- xlNone
・・・意外と種類は少なかったです。こんなものだったのか。
ちなみに VBA は、定数を知っているとプログラムが書きやすかった印象が残っています。
あと、With というキーワードを使うと、コードを短くできた記憶があります。
もう一つ印象に残っている VBA プログラムは、Office ドキュメント(主に Excel ファイル)に書かれたリンクを一斉に置換するものでした。
これは七年ぐらい前の話で、ある企業のファイルサーバーを別マシンに引越することになったのですが、社員さんが各自で作った作業用のドキュメントにファイルサーバー上にあるファイルへのリンクをハードコーディングしていたので、引越日までに全て書き換える必要がありました。
当時のプログラムは手元にないので印象を頼りに書いていますが、プログラム自体はそんなに難しくありませんでした。
ただしドキュメントの数が多かったのとリンクの内容もバラバラだったので、検証作業が面倒臭かった記憶があります。
最後の一つは、エンティティ定義書(*.xls)に VBA プログラムを組み込んで、ボタンを押すと、DDL ファイル(*.sql)と、Java の Bean および DAO クラス(*.java)と O/R マッパー用の定義ファイル(*.xml)を自動生成するものでした。
二年ぐらい前まで使っていましたが、ポイントは以下の二点だったと思います。
エンティティ定義書には DB テーブルのカラム名と桁数だけが書かれていて、カラム名は半角大文字とアンダースコアで構成されていました。
一方、Java 用のフィールド名はキャメルケースなので、ファイルを自動生成する時は、DB のカラム名を一旦小文字化した後、先頭の文字とアンダースコアの直後の文字だけ大文字にして、アンダースコアを削除置換するというロジックになっていたはずです。
また、Java のフィールドの型は、DB のカラムの型と桁数を元に決定していたと思います。
VBA というか VB は自分が最初にプログラムを習った時の言語で、初心を思い起こさせてくれます。
最近は VBA のプログラムを触ることが殆どなくなりましたけど、キャンペーンを機会に昔を思い出して書いてみました。
Surface Pro が当たると良いな。