VBAのConst(定数)の使い方 | 変数との違い・モジュールレベルの定義・実務パターン

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 = 100Dim 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が初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール