「修正地獄」からの卒業:Excel設定を“定数”で一元管理する技術
こんにちは。自動化の世界へようこそ。
マクロの記録から一歩踏み出し、自らコードを書くようになったあなたへ、まず最初に叩き込んでほしい「プロの流儀」があります。
それが「設定の定数化(ハードコーディングの排除)」です。
多くの初心者が、「ファイル名が変わった」「シート名が変わった」というたびに、コードの中身を検索しては書き換える…という「修正地獄」に陥ります。しかし、設計を知る者はそんなことはしません。設定値を一箇所に隔離し、コードそのものは「環境に依存させない」のです。
今日は、その極意を伝授しましょう。
—
なぜ「直接書く」のが悪なのか?
例えば、セルにデータを書き込むコードを書くとき、こんな風に書いていませんか?
‘ 悪い例:あちこちに直接「シート名」や「パス」を書いている
Worksheets(“売上データ_2023”).Range(“A1”).Value = “集計完了”
これの何が問題か?
もしシート名が「売上データ_2024」に変わったら? 別のプロジェクトで同じコードを使い回したいときは?
コードを修正するたびに、バグを埋め込むリスクが発生します。
—
定数(Constant)という「聖域」を作る
VBAには、値を一度定義したらプログラム実行中に書き換えられない「定数」という仕組みがあります。これを使って、すべての「環境依存情報」をモジュールの先頭に集めてしまうのです。
実践:設定専用モジュールの構築
まずは、`Config` という標準モジュールを作成し、そこに設定をまとめます。
‘ 【Configモジュール】
‘ ここに定数をまとめることで、コードのメインロジックを一切汚さない
Option Explicit
‘ パブリック定数(Public)として定義すれば、どのモジュールからでも参照可能
Public Const SH_NAME_SALES As String = “売上データ_2023”
Public Const FILE_PATH_EXPORT As String = “C:\Reports\Monthly\”
Public Const TARGET_CELL As String = “A1”
呼び出し側(メイン処理)のコード
こうすることで、メインの処理は驚くほど美しく、かつ強固になります。
‘ 【Mainモジュール】
Sub UpdateSalesData()
‘ 定数を使うことで、何をしているのかが直感的にわかる
‘ 万が一シート名が変わっても、Configモジュールを直すだけで全ての処理が適応される
On Error Resume Next ‘ エラー対策の基本(後述)
Worksheets(SH_NAME_SALES).Range(TARGET_CELL).Value = “更新済み”
If Err.Number <> 0 Then
MsgBox “設定を確認してください:シート「” & SH_NAME_SALES & “」が見つかりません。”
End If
End Sub
—
ここをクリアすれば一人前:知っておくべき3つの鉄則
1. `Option Explicit` を必ず書く
モジュールの先頭にこれを書くことで、変数や定数の宣言漏れをエラーとして検知できます。これがないコードは、夜道でヘッドライトを消して走るようなもの。必ず設定してください。
2. 定数の「意味」を名前に込める
`Const A As String = “Sheet1″` としても動きはしますが、半年後のあなたは「Aって何だっけ?」となります。
`SH_NAME_SUMMARY` のように、「何のためのデータか」を名前に含めること。 これがプロのコードの共通言語です。
3. 環境依存を徹底的に外に追い出す
ファイルパスやシート名だけでなく、例えば「消費税率(0.1)」や「閾値(10000)」なども定数化してください。これらも「ビジネスルール」の一部であり、コード本体のロジックとは別枠で管理すべきだからです。
—
さあ、次はあなたの番です
この設計手法を身につけると、コードは「使い捨てのメモ」から「資産」へと変わります。
環境が変わっても、OSがアップデートされても、フォルダ構成が変わっても、あなたは Configモジュールを一行書き換えるだけ で、完璧な自動化システムを維持し続けることができます。
「コードを変えずに機能を管理する」。
これが、大規模システムを支えるエンジニアの思考回路の第一歩です。
まずは今、あなたのプロジェクトにある「直接書かれたシート名」を一つだけ、定数に置き換えてみてください。その小さな積み重ねが、あなたを「マクロを書く人」から「システムを設計する人」へと変えてくれるはずです。
応援しています。何か詰まったら、いつでも戻ってきてくださいね。
