変数の宣言


変数は必ず宣言するようにしてください。そのために、宣言しないと変数を使えないようにVBEの設定を変更しましょう。

変数の宣言を強制する

VBEを起動して[ツール]-[オプション]を実行します。表示される[オプション]ダイアログボックスの[編集]タブで、[変数の宣言を強制する]チェックボックスをオンにしてください。

[OK]ボタンをクリックして[オプション]ダイアログボックスを閉じると、これ以降に挿入した標準モジュールなどで、先頭に「Option Explicit」という命令が自動的に挿入されます。この「Option Explicit」が記述されているモジュールでは、宣言しない変数は使えなくなります。

変数を宣言する理由

変数を宣言すべき理由はいくつかありますが、何よりも「自分のため」です。上記の設定をせず、宣言しないでも変数を使える環境では、VBAが理解できる命令語や数値以外は、すべて変数として認識されます。たとえば、次のようなコードでも、エラーにならず実行されます。

Sub Sample1()
    基準値 = 100
    N = 基準値 * 2
    Message = "答は" & N & "です"
    MsgBox Mesaage
End Sub

「基準値」「N」「Message」などはVBAの命令語ではありませんので、その語が登場した時点で、VBAは「そういう名前の変数が暗黙的に宣言された」と解釈します。では、変数の宣言が強制されていない環境で、上記のコードをコピーして実行してみてください。画面には何も表示されないはずです。

よく見てください。3行目で「"答は" & N & "です"」を代入している変数は「Message」ですが、次の行のMsgBoxで表示している変数名は「Mesaage」となっています。

これはバグです。しかし、コードにバグが含まれているにもかかわらず、マクロは正常終了します。「MsgBox Mesaage」が実行される時点でVBAは、新しく「Mesaage」という名前の変数を用意してしまうのです。

上記の例は、わずか数行のマクロですから、タイプミスに気づくかもしれません。しかし、これが数百行のマクロだったらどうでしょう。エラーにならないのですから、変数名のタイプミスを発見するには、コードをすべて精査するしか手はありません。それどころか、エラーが発生しないのですから、そもそも間違いがあることにすら気づかないかもしれません。

変数の宣言を強制している環境で上記のコードを実行すると、変数名にタイプミスがあるというエラーが発生します。

VBAを解説する雑誌などでは、変数の宣言をせずに解説するケースもありますが、その多くは「ページ数の制限」や「レイアウトの都合」あるいは「宣言まで解説すると長くなるし、型の説明もしなくちゃならないし、逆にビギナーは混乱しちゃうかもしれないから、ここはまぁ、宣言を強制しないってことで」みたいな理由からです。

ビギナーが宣言をしたがらない理由

ちょっとVBAを使えるユーザーに「どうして変数を宣言しないの?」と質問すると、たいていは「なんか、宣言するとエラーになるときがあるしぃ、宣言てよくわかんないしぃ」みたいな答が返ってきます。しかし、エラーになる原因や、よくわかんないのは、変数の宣言ではなく、変数の型指定でしょう。

変数には、格納する値の種類によって、指定する「型」という概念があります。文字列を格納する変数は「文字列を格納する変数」として宣言し、数値を格納する変数は「数値を格納する変数」として宣言しなければなりません。そして、数値を格納するための変数に文字列を入れようとするとエラーになります。これは、テニスラケット用のケースにゴルフクラブを入れられないようなものです。変数を宣言するときには、その変数にどんなタイプの値を格納するかを想定して、適切な型を指定しなければなりません。しかし、それがビギナーにとっては難しいのです。

(1)変数の型を指定して宣言してみた
      ↓
(2)なんか知らんがエラーになった
      ↓
(3)型の指定とか訳わかんないし
      ↓
(4)じゃ、いっそ変数は宣言しないってことでおk?(←今ここ)

みたいなもんですね。でも、難しいのは「型の指定」です。「変数の宣言」ではありません。型の指定がわからないからといって、変数の宣言そのものを省略してしまうのは乱暴すぎます。「型の指定」だけを省略すればいいのです。

変数の型については、次ページで詳しく解説します。

宣言のしかた

変数を宣言するときは、次のようにします。

Dim 変数名 As 型

どんな型を指定すればいいかわからないときは、型の指定を省略しましょう。型の指定を省略すると、バリアント型(Variant)が指定されたものとされます。

Dim 変数名

複数の変数を宣言するときは「変数名 (As 型)」をカンマで区切ってつなげます。または、複数のDimを使います。

Dim X As Long, Y As Long
Dim X As Long
Dim Y As Long

上記はどちらも、長整数型(Long)の変数XとYを宣言しています。

注意しなくてはならないのが

Dim A, B, C As Long

という宣言のしかたです。VBAでは、このように宣言したとき、長整数型(Long)になるのは変数Cだけです。変数Aと変数Bは、型の指定が省略されたものとみなされて、どちらもバリアント型(Variant)となります。

変数の種類によっては、Dimではなく、別の命令語を使う場合もあります。

例:

Public X As Long (パブリック変数)

Private X As Long (パブリック変数)

Static X As Long (静的変数)

また、変数は、宣言する場所や、宣言のしかたによって、使える場所が異なります。

詳しくは「変数の適用範囲」をご覧ください。