前置き
自分は製造メーカーの情報部門で社内向けにVBAを使った開発をしています。
VBAで作るものは、ツール、Excel自動化、DBからExcelへデータ抽出などです。
問題点
社内向けに開発を行うと、ユーザーとの距離が近いせいか追加要求が頻繁に飛んできます。
ホントは、企画要件定義段階で仕様を固めたいのですが、あまり強く言ってしまうと現場からのツール化ハードルが高くなってしまってツール化・自動化が進まない恐れもあります。
要件定義をキッチリ行うことも重要なのですが、ここでは追加要求に対処するコードの書き方を記します。
現場からの追加要求
列項目の追加 & 列項目の変更
これがくると、苦労されるのではないしょうか。
CheckThicknessは私が作った関数で、意味は理解しなくて大丈夫です。引数にしている4,5なのですが、これは列番号です。
CheckThicknessは引数で受け取った列番号を処理して何をするマクロです。
この列指定方法は悪い例で、例えばユーザー側から、1列目に新たに列を挿入したい。という要望がくると、CheckThicknessが処理したい列番号は自然と+1されてしまい、↑の画像では4を5に。5を6に。計6か所の修正が入ります。
6ヵ所だけならばいいのですが、列を挿入したワークシートに関係しているマクロすべてをチェックしなければいけません。
今回は変更を一度で済ませる列番号の指定方法についてお伝えします。
列番号を指定するときは、Enumを使ってください。
Enum:列挙型とも呼ばれます
使用例:
定数の宣言にてEnumを記述しています。
意味は、
列.日付には1が入ります。
列.商品名には2が入ります。
列.売上には3が入ります。 ...
Enum列に列番号はが入るということですね。
enumは定数という扱いになっていて、モジュールの中で値を入れることはできません。
個数の右に販売日付の列を挿入したいとき。
(マクロ)列番号の変更
Enumの個数の下に販売日付を入れてあげればOK。
列.販売日付=6
列.利益=7
となり、ワークシートの変更に合わせてEnumの変更のみで保守完了します。ラクチンです。