更新日:、 作成日:

VBA Const 定数を宣言する

はじめに

Excel VBA マクロで Const 定数を宣言する方法を紹介します。

定数とは、宣言時に値を代入して後から変更できないものです。値に名前を付ける目的でも使用します。

Const 定数名 As 型名 = 値 のようにして、定数を宣言できます。

定数にできる型は数値や文字列、日付などの値型です。クラスや構造体などは定数に使用できません。

配列は定数にできません。変数に「Array 関数」で定数のように値を設定できます。

Public Const で宣言するには、標準モジュールにする必要があります。

定数をグループ化するには「Enum 列挙型」をご覧ください。

Const 定数を宣言する

Const 定数名 As 型名 = 値 のように入力します。Const が定数を宣言するキーワードです。

Const サイト名 As String = "Tipsfound"
Const MAX As Integer = 100
Const 誕生日 As Date = "2000/12/31"

定数は宣言時に値を代入します。その後は値を変更できません。このため「定数」と言います。

Const 定数 As String = "Tips"

Sub 実行()
    定数 = "found" ' エラー、定数の値は変更できない
End Sub

有効範囲の最大値やシステムで決められているコード値など、動的に変更されない値を定数にします。

定数の名前に使用できない文字があります。詳しくは「命名規則」をご覧ください。

定数の型と代入できる値

数値、文字列、日付などの値型を定数の型として宣言できます。オブジェクトや構造体や Enum や配列などを型として使用できません。

変数や Function 関数の戻り値も値として代入できません。定数は VBA が実行される前に値が設定されるため、変数や関数などプログラムが実行してから値が決まるものは代入できません。

Const 文字列 As String = "文字"
Const 日付 As Date = #3/30/2013#
Const 数値1 As Integer = 100
Const 数値2 As Integer = VbMsgBoxResult.vbOK ' Enum を値としてなら代入できる

Const 数値3 As Integer = 関数名              ' エラー、関数の戻り値を代入できない
Const 列挙型 As VbMsgBoxResult = VbMsgBoxResult.vbOK ' エラー、Enum を型に使用できない
Const クラス As Object = Range("A1")         ' エラー、オブジェクトを型に使用できない

他の言語にある ReadOnly (読み取り専用) は VBA にはありません。

型について詳しくは「変数の型やデータ型」をご覧ください。

Const 定数のスコープ

定数に使用できるスコープは Public と Private です。定数に Dim は使用できませんが、関数内で宣言すると Dim と同じ範囲になります。

省略したときは Private になります。

Public で宣言するには、標準モジュールにする必要があります。Sheet1 やクラスには宣言できません。

Public Const パブリック As Integer = 1 ' Public は標準モジュールにのみ宣言できる

Private Const プライベート As Integer = 2

Const 省略 As Integer = 2 ' 省略したときは Private になる

Sub 実行()
    Const ローカル As Integer = 3 ' 関数内は Dim と同じ範囲
End Sub
詳しくは「スコープ」をご覧ください。

Const 定数に配列を宣言する

配列を定数にはできませんが「Array 関数」を使用して簡単に配列を作成できます。

Private 配列() As Variant ' Variant 型にする必要があります

Sub 実行()
    配列 = Array(1, 2, 3)  ' 定数のように配列を作成

    Dim i As Variant
    For Each i In 配列
        Debug.Print(i) ' 1 2 3
    Next
End Sub
配列について詳しくは「配列」をご覧ください。

Const 定数を使う理由

次のように定数名を付けることで、意味のない値が最大値であったり、誕生日であることがわかります。

Public Const MAX As Integer = 100
Public Const 誕生日 As Date = "2000/12/31"

最大値が 100 であるものをコードの何か所にも直接 100 と入力すると、間違って入力することもあります。他の 100 の値と区別がつかなくなります。 変数に 100 を入れてもどこかで変更されるかもしれません。

このような問題を定数を使えば解決できます。値に意味のある名前を付けて、コードが理解しやすくなります。

Const 定数のグループ (Enum)

Long 型固定ですが、定数をグループ化できる Enum (列挙型) があります。

詳しくは「Enum 列挙型」をご覧ください。