このページでは、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
- メッセージボックスに「0」と表示される
- メッセージボックスに「100」と表示される
- メッセージボックスに「200」と表示される
- エラーが発生する
正解を見る
4
コメント