「あぁ……またレイアウト変更か……」
現場で働いていると、こんなボヤキが聞こえてきます。
「列が一つ増えたから、マクロの『5』って書いてあるところを全部『6』に書き直して!」なんて頼まれた日には、もう大変。100箇所くらいある「5」を一つずつ探し、冷や汗をかきながら修正する……。
私も初心者の頃、これをやって大失敗しました。
一括置換で「5」を「6」に変えたら、列番号じゃない「5(消費税率など)」まで書き換わってしまい、計算がめちゃくちゃに。苦い思い出です(笑)。
そんな悲劇を防ぎ、修正時間短縮してくれるのが、今回紹介する「Const(定数)」です。
「定数」は、絶対に変わらない「名前付きラベル」
プログラミングの世界には「変数」と「定数」があります。
- 変数: 中身がコロコロ変わる箱(例:今日の売上、ループの回数)
- 定数(Const): 一度決めたら絶対に変えないラベル(例:消費税率、データの開始行、列番号)
例えるなら、変数は「筆箱(中身が入れ替わる)」で、定数は「教室の座席表(誰がどこに座るか決まっている)」のイメージです。
なぜ「そのまま数字」を書いてはいけないのか?
コードの中に直接「5」や「1.1」といった数字を書くことを、専門用語で「マジックナンバー」と呼びます。
書いた本人にしか意味がわからず、後から見ると「呪文(マジック)」のように意味不明になるからです。
そこで「Const」という名前のラベルに置き換えます。これだけで、コードの読みやすさが劇的に変わります。
【実践】コピペでOK!定数を使ったビフォーアフター
例えば、「5列目(E列)にある金額に、消費税10%を掛けて計算する」コードで比較してみましょう。
❌ 良くない例(後々修正が大変になってしまうコード)
Sub SampleBad()
' 5列目が金額、1.1が税込み。意味を知らない人が見ると「?」となります
Cells(2, 6).Value = Cells(2, 5).Value * 1.1
End Sub
⭕ 良い例(定数を使ったコード)
Sub SampleGood()
' --- 定数の宣言 ---
Const TAX_RATE As Double = 1.1 ' 消費税率
Const COL_PRICE As Integer = 5 ' 金額が入っている列(E列)
Const COL_TOTAL As Integer = 6 ' 計算結果を出す列(F列)
' --- 実際の処理 ---
Cells(2, COL_TOTAL).Value = Cells(2, COL_PRICE).Value * TAX_RATE
End Sub
名前がついているので、一目で何をしているかが分かりますね。
定数を使う3つの大きなメリット
- 修正が「1箇所」で済む
もし列が5列目から10列目に変わっても、一番上の COL_PRICE = 5 を 10 に変えるだけ。それ以降の処理を触る必要はありません。 - ミスが減る
サンプルはわずか数行ですが、数百~数千行のコードになっても、その中から該当する「5」を検索して置換する手間がなくなり、関係ない数字を書き換えるリスクがゼロになります。 - メンテナンス性の向上
読みやすいコードになるので、6ヶ月後、12か月後の自分や他人がコードを見たときでも、「この1.1って何だっけ?」と悩む時間をゼロにできます。
慣れないうちは、変数を使うことだけでいっぱいいっぱいかと思いますが、VBAに限らずたいていのプログラミング言語では定数を使えますので、ぜひ試してみてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント