変数は必ず宣言するようにしてください。そのために、宣言しないと変数を使えないように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 (静的変数)
また、変数は、宣言する場所や、宣言のしかたによって、使える場所が異なります。
詳しくは「変数の適用範囲」をご覧ください。