何らかの値に対して、別の文字を割り当てたものを定数と呼ぶ。このページでは、Excel VBAにおける定数の宣言方法と、エキスパート試験のポイントを解説する。
定数の宣言にはConstステートメントを使う
ユーザー独自の定数を定義するときは、Constステートメントを使用する。次のプロシージャでは「TEST_NUM」という定数を宣言している。
Sub Test()
Const TEST_NUM As Long = 100
MsgBox TEST_NUM * TEST_NUM
End Sub
数値の100に「TEST_NUM」という名前を割り当てている。そのため、定数を宣言したあとは、「TEST_NUM」は数値の100として扱われる。よって、このSubプロシージャを実行するとメッセージボックスに「10000」と表示される。
定数にも適用範囲がある
変数の適用範囲(スコープ)のページで、変数の適用範囲(スコープ)について解説した。それと同じく、定数にも3つの適用範囲がある。
定数の種類 | ステートメント | 適用範囲 |
---|---|---|
ローカル定数 | Const | 宣言されたプロシージャ内でのみ使用できる |
モジュール定数 | Const または Private Const |
宣言されたモジュール内のすべてのプロシージャで使用できる |
パブリック定数 | Public Const | すべてのモジュールのすべてのプロシージャで使用できる |
適応範囲の考え方は、変数の場合とまったく同じだ。なのでここでは説明を省略する。
VBAエキスパート試験に関して言うと、定数の宣言に使うステートメントを間違わないようにしたい。たとえば、ローカル定数は「Dim Const」ではなく「Const」で宣言する。Dimを付けるとコンパイルエラーが発生するので注意が必要だ。
Sub Test1()
'正しい定数の宣言方法
Const NUMBER As Long = 100
MsgBox NUMBER * NUMBER
End Sub
Sub Test2()
'コンパイルエラー
Dim Const NUMBER As Long = 100
MsgBox NUMBER * NUMBER
End Sub
既存の定数を使って、新しい定数を宣言できる
少し変わった方法かもしれないが、すでに宣言した定数を使って、新たに定数を宣言することもできる。
次のプロシージャには2つの定数がある。「NUMBER_1」と「NUMBER_2」だ。
Sub Test()
Const NUMBER_1 As Long = 100
Const NUMBER_2 As Long = NUMBER_1 * 5
MsgBox NUMBER_2
End Sub
「NUMBER_1」の値は数値の100だ。では「NUMBER_2」の値はいくつになるだろうか。
その答えは、数値の500だ。
次のように流れを追えば、理解しやすいと思う。
↓
Const NUMBER_2 As Long = 100 * 5
↓
Const NUMBER_2 As Long = 500
Excel VBAのエキスパート試験で、この定数の宣言方法について出題されるかどうかは分かりらない。しかし、覚えておいて損はないと思う。ちなみに、Access VBAのほうでは、公式テキストにこの定数宣言の方法が書かれていたと思う。
練習問題
定数を宣言するステートメントとして正しいものを、次の中から1つ選択しなさい。
Dim Const TITLE As String "Excel VBA"
Dim Const TITLE As String = "Excel VBA"
Const TITLE As String "Excel VBA"
Const TITLE As String = "Excel VBA"
正解を見る
コメント