【VBA】脱・ハードコーディング!定数と設定値をスマートに管理する極意
VBAの保守性を下げる最大の要因は、コードの中に直接書き込まれた「値」です。これらを「不変の定数」と「可変の設定値」に切り分け、適切な場所に配置する設計術を整理してみましょう。
1. 定数(Const):コードに刻む「不変のルール」
プログラミングにおける定数とは、システムのロジックそのものを支える「物理法則」のようなものです。これらは標準モジュールで一括管理するのが鉄則です。
[ 管理場所 ]:専用の標準モジュール(例:MConst)に Public Const で集約。
[ 用途 ]:数学的な定数(円周率)、エラーコードの定義、1週間の日数など。
2. 設定値(Settings):外に出すべき「可変のデータ」
ポイント:ロジック(VBA)とデータ(設定)を分離する
「保存先パスが変わった」「税率が変わった」だけでVBAプロジェクトを解いてコードを修正するのは非効率です。これらはコードの外(シートや外部ファイル)に追い出し、実行時に読み込む設計にします。これにより、開発者以外でも安全に挙動を調整できるようになります。
3. 進化した定数管理の構成図
理想的な構成は、管理レベルに応じて「内部管理」と「外部管理」を使い分けるハイブリッド型です。
Lv.1: 固定値(コード内のConst)
数学的定数など、アプリの根本ルール。
Lv.2: 準固定値(専用の標準モジュール)
開発者だけが把握していれば良い内部定数(アプリ名称など)。
Lv.3: 設定値(Excelの隠しシート)
運用担当者が変更する可能性のある値(税率、フォルダパス)。
Lv.4: 環境依存値(外部ファイル / 環境変数)
実行環境(開発機・本番機)で変わる値(DB接続先、ログ出力先)。
4. エンジニアの視点:なぜ「外部化」が必要なのか?
1. 判断の基準: 「その値を変えるとき、ロジックの修正が必要か?」と考えます。単なるパラメータの変更なら「設定値(外部)」、プログラムの挙動そのものの定義なら「定数(内部)」です。
2. 保守性の違い: すべてを Const で書くと、環境移行や年次更新のたびに開発者の工数が発生します。設定値をシート等に逃がすことで、現場で完結する「自走するツール」になります。
3. 美しさの正体: 定数を直す際にコードを触らない設計は、オブジェクト指向における「依存性の注入(DI)」の第一歩です。クラスモジュール等で設定読み込みを隠蔽すれば、メインロジックは常にクリーンな状態を保て、まさに「いけいけ」なコードになります。
5. まとめ
内部定数(Lv.1-2)でシステムの堅牢性を保ち、外部設定(Lv.3-4)で運用上の柔軟性を保つ。この2軸を意識するだけで、あなたのVBAツールは劇的にメンテナンスしやすくなります。「定数を直すためにコードを開かない」——そんなスマートな設計を目指しましょう。