VBAの定数は、変数と何が違うのか?

このページでは、VBAにおける定数と変数の違いについて説明する。なお、説明内容はVBAエキスパート試験(ベーシックレベル)の範囲にとどめた。

スポンサーリンク

定数には宣言時に値を設定する

次のプロシージャ「Test」を見てほしい。定数「NUMBER」と変数「buf」が定義されている。このコードは正常に実行できる。

Sub Test()
    Const NUMBER As Long = 100  '定数
    Dim buf As Long    '変数
    buf = 5
    MsgBox NUMBER * buf
End Sub

定数は、宣言すると同時に値を設定する必要がある。上の例では、定数「NUMBER」に、数値の100を設定している。それに対して、変数「buf」の方は宣言したあとに値を設定している(数値の5)。

次の書き方はエラーが発生する。定数「NUMBER」の宣言時に、値を設定していないからだ。

Sub Test()
    Const NUMBER As Long  'コンパイルエラー
    NUMBER = 100
    Dim buf As Long
    buf = 5
    MsgBox NUMBER * buf
End Sub

また、次の書き方もエラーが発生する。変数「buf」の宣言時に、値を設定してしまっているからだ。

Sub Test()
    Const NUMBER As Long = 100
    Dim buf As Long = 5  'コンパイルエラー
    MsgBox NUMBER * buf
End Sub

プログラミング言語によっては、変数宣言と同時に値を設定することができる(たとえばVB.netやPHP)。しかしVBAでは許されていない。

定数には一度だけ値を設定できる

定数の値は、宣言時に一度だけ設定できる。そのあとで値を変更することはできない。よって次のコードはエラーが発生する。

Sub Test()
    Const NUMBER As Long = 100
    NUMBER = 200  'コンパイルエラー
    MsgBox NUMBER * NUMBER
End Sub

それに対して、変数の値は何度でも変更することができる。次のコードでは変数「buf」の値を3回変更している。しかしエラーは発生しない。

Sub Test()
    Dim buf As Long
    buf = 100
    buf = 200
    buf = buf + 300
    MsgBox buf * buf
End Sub

練習問題

標準モジュールに次のコードを記述した。プロシージャ「Lesson」の実行結果として正しいものはどれか。次の中から1つ選択しなさい。

Option Explicit
Const NUMBER As Integer = 100

Sub Lesson()
    NUMBER = 200
    MsgBox NUMBER
End Sub

  1. メッセージボックスに「0」と表示される
  2. メッセージボックスに「100」と表示される
  3. メッセージボックスに「200」と表示される
  4. エラーが発生する

正解を見る

4

コメント