定数の宣言方法とVBAエキスパート試験のポイント

何らかの値に対して、別の文字を割り当てたものを定数と呼ぶ。このページでは、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 = NUMBER_1 * 5

Const NUMBER_2 As Long = 100 * 5

Const NUMBER_2 As Long = 500

Excel VBAのエキスパート試験で、この定数の宣言方法について出題されるかどうかは分かりらない。しかし、覚えておいて損はないと思う。ちなみに、Access VBAのほうでは、公式テキストにこの定数宣言の方法が書かれていたと思う。

練習問題

定数を宣言するステートメントとして正しいものを、次の中から1つ選択しなさい。

  1. Dim Const TITLE As String "Excel VBA"
  2. Dim Const TITLE As String = "Excel VBA"
  3. Const TITLE As String "Excel VBA"
  4. Const TITLE As String = "Excel VBA"

正解を見る

4

コメント