Excel VBAでマクロを作っていると、
シート名やセル番地を文字列で直接書いているコードをよく見かけます。
一見すると問題なく動いているように見えますが、
実務ではこの書き方が原因で、
「修正が大変」「どこを直せばいいか分からない」「気づかないうちに壊れる」
といったトラブルが頻発します。
こうした問題を根本から防ぐために有効なのが、
Public Const を使って値を“定数化”する設計です。
この記事では、
Public Const の基本から、
シート名・セル値を定数として管理する実務的な使い方、
そして「なぜこの書き方が保守性を高めるのか」まで、
設計目線で丁寧に解説します。
目次
- ✅ なぜシート名やセル番地を直書きすると危険なのか
- ✅ Public Constとは何か(基本の考え方)
- ・Public Constの基本構文
- ✅ シート名をPublic Constで管理するメリット
- ・シート名を定数化する基本例
- ・なぜこの書き方が強いのか
- ✅ セル番地・固定値をPublic Constで管理する考え方
- ・セル番地を定数化する例
- ✅ ConstとDimの違いを意識した設計
- ・Constが向いている値
- ・Dimが向いている値
- ✅ Public Constはどこに書くべきか
- ・定数専用モジュールを作る設計
- ✅ 実務でよくある失敗と回避策
- ・意味のない名前を付けてしまう
- ・変更される値をConstにしてしまう
- ✅ 応用:Public Constは“設計メモ”として使える
- ✅ まとめ:Public Constは保守性を劇的に高める
✅ なぜシート名やセル番地を直書きすると危険なのか
VBA初心者〜中級者のコードで特に多いのが、
以下のような書き方です。
Worksheets("売上データ").Range("B2").Value = 100
このコード自体は正しく動きます。
しかし、実務ではこの書き方が積み重なるほど危険になります。
なぜなら、
・シート名が変更された
・列構成が変わった
・複数マクロで同じ値を使っている
といった変更が入った瞬間、
修正箇所をすべて探し回る必要が出てくるからです。
ここを理解せずにマクロを増やしていくと、
「動くけど怖くて触れないマクロ」になってしまいます。
✅ Public Constとは何か(基本の考え方)
Public Const は、
VBA全体で共有できる「変更されない値」を定義するための仕組みです。
重要なのは、
「単に定数を作れる」ことではなく、
設計意図をコードで表現できる点にあります。
・Public Constの基本構文
Public Const SHEET_SALES As String = "売上データ"
この1行だけで、
- この値は変更されない
- VBAプロジェクト全体で使われる
- 意味のある名前が付いている
という情報を、コード自体が語ってくれます。
✅ シート名をPublic Constで管理するメリット
シート名は、
Excel運用の中で変更されやすい要素の代表例です。
・シート名を定数化する基本例
Public Const SHEET_SALES As String = "売上データ"
Public Const SHEET_MASTER As String = "商品マスタ"
これを使う側では、次のように書きます。
Worksheets(SHEET_SALES).Range("A1").Value = "更新完了"
・なぜこの書き方が強いのか
もしシート名が
「売上データ」→「売上一覧」に変わった場合でも、
修正箇所は定数定義の1か所だけです。
これは単なる時短ではなく、
保守性と安全性の向上につながります。
✅ セル番地・固定値をPublic Constで管理する考え方
Public Const は、
シート名だけでなく、セル番地や固定値の管理にも向いています。
・セル番地を定数化する例
Public Const CELL_TOTAL As String = "B10"
Public Const CELL_START_ROW As Long = 2
これを使うことで、
コードは次のように「意味を持った形」になります。
Range(CELL_TOTAL).Value = 100
単なる "B10" よりも、
「合計セルに値を入れている」ことが一目で分かります。
✅ ConstとDimの違いを意識した設計
ここで重要なのが、
「なぜ Dim ではなく Const なのか」という視点です。
・Constが向いている値
- 絶対に変更されない
- 業務ルールとして固定
- プログラムの前提条件
・Dimが向いている値
- 処理中に変化する
- 計算結果
- 一時的な作業用データ
この線引きを意識すると、
コードの役割分担が明確になります。
✅ Public Constはどこに書くべきか
Public Const は、
標準モジュール(Module) にまとめて記述するのが基本です。
・定数専用モジュールを作る設計
' Module: ConstDefinition
Public Const SHEET_SALES As String = "売上データ"
Public Const SHEET_MASTER As String = "商品マスタ"
Public Const CELL_TOTAL As String = "B10"
こうしておくことで、
- 定数の一覧性が高い
- 仕様変更に強い
- 他人が読んでも理解しやすい
というメリットが得られます。
✅ 実務でよくある失敗と回避策
Public Const を使う際、
次のような失敗もよく見られます。
・意味のない名前を付けてしまう
Public Const STR1 As String = "売上データ"
これでは、
何を表している定数なのか分かりません。
「どこで」「何として」使われるかが分かる名前を付けることが重要です。
・変更される値をConstにしてしまう
設定値やユーザー入力値は、
Const に向いていません。
「将来変わる可能性があるか?」
を基準に判断しましょう。
✅ 応用:Public Constは“設計メモ”として使える
Public Const の最大の価値は、
コードそのものが設計書になる点です。
- このシートは重要
- このセルは業務上の基準点
- この値は変えてはいけない
そうした判断を、
コメントではなく「コード構造」で表現できます。
これは、
長く使われる業務マクロほど効いてくる設計です。
Public Const を「設計メモ」として使えるようになると、
マクロを書く前に「どこが固定で、どこが変わるのか」を考える癖がつきます。
逆に、この設計を考えないまま
「とりあえず動くVBA」を積み上げてしまうと、
後から修正や拡張が難しい業務になりがちです。
そうした失敗が起きやすい業務パターンと、
設計で分かれる判断ポイントについては、こちらで詳しく整理しています。
「とりあえずVBA」が危険になる業務パターンと設計の分かれ道
✅ まとめ:Public Constは保守性を劇的に高める
- シート名・セル番地の直書きは将来の負債になる
Public Constを使うと修正箇所を一元化できる- コードの意味が読みやすくなる
- 設計意図をコードで表現できる
- 実務マクロほど効果が大きい
Public Const は、
派手なテクニックではありません。
しかし、
「長く使われるマクロ」「他人が触るマクロ」ほど、
この差が確実に効いてきます。
今書いているマクロが
半年後・1年後も使われる可能性があるなら、
ぜひ一度、定数化の設計を見直してみてください。