VBAで処理を組んでいると、同じ値を何度もコードの中で使う場面が出てきます。
たとえば「税率は10%」「書き込み先はシート名『データ』」「完了メッセージは『処理が終わりました』」など、決まった値を何度も使うときには、定数(Const)として定義するのが便利です。
定数を使えば、あとから値を変えたいときにも一か所を直すだけで済みますし、コードの意味もわかりやすくなります。
今回は、そんな「Const」を使った定数の管理方法について紹介します。
Const の基本的な書き方と使い方
定数は Const を使って次のように書きます。
Const 消費税率 As Double = 0.1
Const SheetName As String = "データ"
Const MsgComplete As String = "処理が完了しました。"
定数は基本的に プロシージャの外側(モジュールの先頭など) に記述することで、モジュール全体で使えるようになります。
この定数を使ったマクロの例はこちらです。
Sub CalcTax()
Dim ws As Worksheet
Set ws = Worksheets(SheetName)
Dim i As Long
For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ws.Cells(i, 3).Value = ws.Cells(i, 2).Value * (1 + 消費税率)
Next i
MsgBox MsgComplete
End Sub
このように定数を使うことで、「何の値なのか」がコードからすぐにわかるだけでなく、値の変更にも強くなります。
定数をまとめておくと便利なケース
定数は次のような場面で特に効果を発揮します。
- 税率、手数料など、将来的に変更の可能性がある数値
- 「完了しました」などのよく使うメッセージ文言
- 「Sheet1」「印刷用」などのシート名
- 「A列が商品名」「B列が単価」などの列番号や列位置
- 参照するフォルダパスやテンプレートファイル名など
たとえば、こんな定義もできます。
Const ColProduct As Long = 1
Const ColPrice As Long = 2
Const ColTotal As Long = 3
こうすれば、次のように書いたコードの意味も、見ただけでわかりやすくなります。
ws.Cells(i, ColTotal).Value = ws.Cells(i, ColProduct).Value & ":" & ws.Cells(i, ColPrice).Value
こうすることでそれぞれの列を固定させることができます。
ポイント
- 定数は読み取り専用で、途中で値を書き換えることはできません
- モジュール内でまとめて管理することで、保守性が上がります
- 名称の付け方は「意味が伝わること」を重視すると効果的です
実装するメリット
定数を使うことで、VBAコードはより明確で、柔軟で、ミスの少ないものになります。
具体的には、次のようなメリットがあります。
- 同じ値を何度も書かなくて済むため、修正時に見落としがなくなる
- 変更が一か所で済むので、メンテナンスが簡単
- コードの意味が明確になるため、読みやすくミスが起きにくい
- 決められた値(ルール)を使っていることが明示的になる
特に、「仕様変更に対応できるコードを書く」という観点では、定数の活用はとても重要なテクニックになります。
定数と変数の違い
「Constにする意味ある?変数じゃダメ?」と思われるかもしれません。
ここでは定数と変数の違いを簡単に整理しておきます。
| 項目 | Const(定数) | Dim(変数) |
|---|---|---|
| 値の変更 | できない(固定) | できる(後から代入可) |
| 宣言方法 | Const x = 100 | Dim x As Long |
| 使う場面 | 常に変わらない値 | 処理中に変わる値 |
定数を使う最大の目的は、「意図せず値を変えてしまうのを防ぐこと」です。
そのため、税率やシート名のように途中で変えてはいけない値はConstで管理した方が安全です。
もし Dim で宣言した変数を使っていた場合、処理の途中でうっかり値を書き換えてしまうこともあります。
Dim 税率 As Double
税率 = 0.1
' 後でうっかり変更
税率 = 0.2 ' 意図しないエラーの元に
このような事故を防ぐためにも、定数と変数は使い分けるようにしましょう。
まとめ
VBAでは、数値や文字列などの「決まった値」を直接コードに書くのではなく、Const(定数)として定義しておくことで、管理がしやすくなります。
- 税率やシート名などの変わりうる情報は定数でまとめる
- 定数名には意味のある名前をつけ、コードの読みやすさを高める
- モジュールの冒頭でまとめて定義しておくと、保守がしやすい
- 変数との違いを意識し、値を変えないものはConstで固定する
コードが短いうちは気にならなくても、処理が増えるほど「定数にしておいてよかった」と思う場面が必ず出てきます。
ぜひ、自分のよく使う値を「Const」で管理して、整理された書きやすいVBAコードを目指してみてください。
