VBA(Visual Basic for Applications)では、プログラム中に固定の値を使うことがよくあります。
その際、変数ではなく 「定数」 を使用することで、
コードの可読性が向上し、意図しない値の変更を防ぐことができます。
この記事では、VBAの定数とは何か、どのような種類があるのか、具体的な使い方をわかりやすく解説します。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
エクセル使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
VBAにおける定数とは?
定数(Constant)とは、一度設定すると変更できない固定の値のことです。
変数とは異なり、プログラムの途中で値を変更することはできません。
例えば、消費税率や担当者の名前など、変更する必要のない値は定数として扱うと便利です。
定数と変数との違い
以下のとおりです。
変数 | 定数 | |
値の変更 | 可 | 不可 |
宣言方法 | Dim 変数名 As 型 | Const 定数名 As 型 = 値 |
使用目的 | 一時的なデータ保存 | 変更しない値の保存 |
値を格納できるという点では双方同じですが、宣言方法などが違います。注意してください。
定数の使い方
まずはコードを見てみましょう。
下記VBAコードは、定数を使った一例です。
Sub 定数のサンプルコード()
Const TAX_RATE As Double = 0.1
Dim price As Double
price = 10000
SalesPrice = price * (1 + TAX_RATE)
MsgBox "税込価格は " & SalesPrice & " 円です。"
End Sub

定数の宣言・代入
Const TAX_RATE As Double = 0.1
上記一文にて、定数の宣言と代入を行っております。
【 Const 定数名 As 型 = 値 】
型の名前や種類については、変数の記事をご参考ください。
変数の場合、宣言と同時に値を代入することはできませんが、
定数は宣言と同時に値を代入することが必須となります。
定数は宣言だけをすることができず、エラーが発生します。

定数の計算
計算は変数の場合と同じです。
SalesPrice = price * (1 + TAX_RATE)
▼関連記事
いろいろな定数
「Private」と「Public」
定数を宣言する際、頭に「Private」をつけることで、
定数の有効範囲(使える範囲)が「現在のモジュール内」に広がります。
(「Const」だけならプロシージャ内のみ有効)
また、「Public」をつけることで、全てのモジュール(プロジェクト内全て)で有効となりまず。
Const MAX_VALUE As Integer = 100 ' プロシージャ内でのみ有効
Private Const MAX_VALUE As Integer = 100 ' 現在のモジュール内で有効
Public Const MAX_VALUE As Integer = 100 ' 全てのモジュール(プロジェクト内全て)で有効
いろいろなプロシージャで使いたい定数なら「Private」を、
プロジェクト全体で使いたい場合は「Public」をつけてください。
列挙型(Enum)
複数の関連する定数をまとめて扱いたい場合は、「Enum」を使うと便利です。
Enum ColorCode
Red = 100
Green = 200
Blue = 300
End Enum
Sub 列挙型()
Dim myColor As ColorCode
myColor = ColorCode.Red
MsgBox "選択された色のコードは " & myColor
End Sub

この方法を使うことで、コードの可読性が向上します。
組み込み定数
これまで、自分で定数を作成する方法を解説いたしました。
定数には組み込み定数といって、元々VBAに標準装備されているものがあります。
代表的なものをいくつか紹介いたします。
- vbCrLf:改行コード(文章を改行したい時に使う)
- vbYes:メッセージボックスの「はい」ボタン
- vbOKOnly:メッセージボックスの「OK」ボタン
▼使用例
MsgBox "メッセージ" & vbCrLf & "次の行に表示", vbOKOnly
▼関連記事
定数を扱う際の注意点
途中で定数を変更できない
定数は変数と違い、プログラムの途中で値を変更することはできません。
下記のVBAコードを見てください。
Const TAX_RATE As Double = 0.1
TAX_RATE = 0.08 ' ← エラー

定数の宣言・代入をした次の行で、値を変更しようとしていますが、これはできません。
一度設定した定数の値は変更できないということを覚えておいてください。
定数に代入できるのはリテラルのみ
リテラルとは、「= 100」や「=”Utatane”」など「決まった値」のことをいいます。
Const CURRENT_YEAR As Integer = 2025 'リテラルを代入→OK
下記のように、場合によって変化する「関数の戻り値」などは代入できません。
Const CURRENT_YEAR As Integer = year(Date)

この場合は、変数として扱う必要があります。
Dim current_year As Integer
current_year = year(Date)
最後に
VBAの定数について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!