VBAで同じ値を何度も使うなら、Const(定数)として名前をつけて一か所で管理するのがベストです。税率・シート名・列番号など「途中で変えてはいけない値」を定数にしておくと、変更時に一か所直すだけで済み、コードの意図も読みやすくなります。
この記事では、次の内容を順番に解説します。
- Constの基本的な書き方と使い方
- 定数と変数(Dim)の違いと使い分け
- モジュールレベル定数でコード全体から使う方法
- 実務でよく使う定数の定義パターン
Constで定数を定義するには?
Const キーワードを使い、名前・型・値の順で記述します。一度定義した定数の値は、コードの中で書き換えることができません。
'定数の書き方
Const 定数名 As データ型 = 値
'具体例
Const TAX_RATE As Double = 0.1
Const SHEET_NAME As String = "データ"
Const MSG_DONE As String = "処理が完了しました。"
この定数を使ったマクロの例です。コードの中に 0.1 や "データ" という値が直接現れず、意図が読みやすくなっています。
Sub CalcTax()
Dim ws As Worksheet
Dim i As Long
Set ws = Worksheets(SHEET_NAME)
For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ws.Cells(i, 3).Value = ws.Cells(i, 2).Value * (1 + TAX_RATE)
Next i
MsgBox MSG_DONE
End Sub
税率を8%に変更する場合、Const TAX_RATE As Double = 0.08 の1行だけ直せば、コード全体に反映されます。値を直接書いていた場合は、使われている箇所をすべて探して変更しなければならず、見落としのリスクが生まれます。
定数と変数の違いを使い分けるには?
「Constにする意味ある?Dimの変数じゃダメ?」と思うかもしれません。両者の違いを整理します。
| 項目 | Const(定数) | Dim(変数) |
|---|---|---|
| 値の変更 | できない(固定) | できる(後から代入可) |
| 宣言方法 | Const x As Long = 100 | Dim x As Long |
| 使う場面 | 処理中に変えてはいけない値 | 処理の途中で変化する値 |
| 誤代入の防止 | できる(エラーで止まる) | できない(上書きされる) |
定数の最大のメリットは「意図せず値を変えてしまうのを防げること」です。Const で宣言していれば、うっかり上書きしようとした瞬間にエラーが出るため、ミスをすぐに発見できます。
モジュールレベル定数で全体から使うには?
複数のプロシージャで同じ定数を使いたい場合は、モジュールの先頭(Subの外)に記述します。
'モジュールの先頭に書く(プロシージャの外)
Const TAX_RATE As Double = 0.1
Const SHEET_NAME As String = "データ"
Const COL_PRICE As Long = 2
Sub CalcTotal()
Dim ws As Worksheet
Set ws = Worksheets(SHEET_NAME)
'(処理)
End Sub
Sub PrintSummary()
'別のSubでも同じ定数が使える
Dim ws As Worksheet
Set ws = Worksheets(SHEET_NAME)
MsgBox "作業シート:" & SHEET_NAME
End Sub
列番号などをモジュールの先頭で定数にしておくと、表のレイアウトが変わったときも定数を1か所直すだけで済みます。
実務でよく使う定数の定義パターン
定数として定義しておくと特に便利な値の例です。
| 種類 | 定数の例 | 理由 |
|---|---|---|
| 税率 | TAX_RATE = 0.1 | 制度変更に対応しやすい |
| シート名 | SH_NAME = "データ" | 名前の変更に強くなる |
| 列番号 | COL_PRICE = 2 | 列の追加に強くなる |
| 保存パス | SAVE_PATH = "C:¥Data¥" | フォルダ変更が楽になる |
まとめ
Const 名前 As 型 = 値で定数を定義する- 定数は変更時に一か所直すだけで済むため、ミスを防げる
- 処理の途中で変えてはいけない値はすべて
Constにするのがおすすめ - 定数名は大文字にしておくと、変数(Dim)と見分けやすくなる
よくある質問
定数の名前を「大文字」にするのはなぜですか?
VBAのルールではありませんが、プログラマーの間の「マナー(慣習)」です。大文字で書いておくことで、コードを読んでいる時に「あ、これは途中で変わらない定数だな」とひと目で判断できるようになり、読みやすさがアップします。
セルの値を定数(Const)に設定できますか?
いいえ、できません。Const MY_VAL = Cells(1, 1).Value と書くとエラーになります。定数は「マクロを書いている時にすでに決まっている値」しか入れられません。セルの値のように実行するまで中身が分からないものは、Dim の変数を使ってください。
全モジュールから使える定数は作れますか?
作れます。標準モジュールの先頭で Public Const TAX_RATE = 0.1 のように、名前の前に Public を付けます。これで、他のモジュールのプログラムからもその名前を使い回せるようになります。
定数に計算式を使ってもいいですか?
Const MINUTE_SECONDS As Long = 60 や Const HOUR_SECONDS As Long = 60 * 60 のように、決まった数字同士の計算であれば可能です。ただし、関数(Now など)を使った計算式は定数には使えません。
定数を消したい場合はどうすればいいですか?
不要になったら、Const と書いた1行を削除するだけです。もしその定数をコード内で使っていた場合は、削除した瞬間に「その名前が見つかりません」というエラーが出るので、修正漏れにもすぐ気づけます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



