変数を宣言する
VBAでは変数は宣言をしなくても使用できますが、使用する前に変数を宣言することを強くお勧めします。変数を宣言するにはDimステートメントを使います。基本の構文は次の通りです。
Dim 変数名 As データ型
複数の変数を1行で宣言する場合はカンマで区切ります。
Dim 変数名1 As データ型, 変数名2 As データ型, 変数名3 As データ型, ...
これらの「As データ型」の部分は省略できます。省略するとバリアント型とみなされます。
名前(識別子)に関する規則
変数の名前(専門的には識別子という)は次の規則に従う必要があります。
- 変数名には英数字、漢字、ひらがな、カタカナ、アンダースコア(_)を使用できる。ただし、先頭に数字を使うことはできない。
- スペース、ピリオド(.)、感嘆符(!)、「@」、「&」、「$」、「#」は使用することが出来ない。
- 長さは半角255文字以内にする。
- 予約語と同じ名前は使わない。
- VBAの関数、ステートメント、メソッド、組み込み定数など、すでに使用されている名前と同じ名前は使わない。
- 変数名の大文字と小文字は区別されないため、ケースだけ異なる名前を使用しない。
変数の宣言を強制する
VBAで変数の宣言は必須ではありませんが、宣言した変数しか使用できないように強制することもできます。それにはモジュールの先頭部分の宣言セクションにOption Explicitステートメントを記述します。

モジュールを追加したときに自動的にOption Explicitステートメントが追加されるように設定することもできます。それには[ツール]>[オプション]で表示されるオプションダイアログで[編集]タブを選択し[変数の宣言を強制する]のチェックボックスにチェックを入れます。
変数を宣言する場所 ― プロシージャレベル変数とモジュールレベル変数
変数を宣言する場所は主に次の2か所です。
- プロシージャ内
- モジュールの先頭の宣言セクション
プロシージャレベル変数
プロシージャ内で宣言される変数はプロシージャレベル変数と呼ばれます。一般にプロシージャ内で使用する変数はプロシージャの先頭でまとめて宣言します。
Sub Sample()
Dim count As Long
Dim name As String
...
End Sub
プロシージャレベル変数は、そのプロシージャ内の中でのみ使用できます。
モジュールレベル変数
モジュールの一番先頭の宣言セクションで宣言される変数はモジュールレベル変数と呼ばれます。
Option Explicit
Dim totalCount As Long
このようにモジュールレベルで宣言された変数は、同じモジュールの中からのみ使用できます。
Publicステートメント
モジュールレベル変数はPublicステートメントを使用してを宣言することもできます。
Public 変数名 As データ型
標準モジュールまたはクラスモジュールでPublicを使って宣言すると、宣言されたモジュール全体から使用できるのはもちろんん、その変数が宣言されているプロジェクトを参照するプロジェクトからでも使用できます。
Priveteステートメント
モジュールレベル変数はPrivateステートメントを使用してを宣言することもできます。これはDimを使った宣言と等価です。
Private 変数名 As データ型
Dimと同様、この変数は同じモジュールの中からのみ使用できます。
プロシージャレベルの変数とモジュールレベル変数
プロシージャ内でDimステートメントを使って変数を宣言すると、その変数はプロシージャの中でのみ使用できます。これはプロシージャレベル変数と呼ばれます。
モジュールの一番先頭の宣言セクションで宣言されると、その変数はモジュール内のすべてのプロシージャから使用できます。これはモジュールレベル変数と呼ばれます。
Publicステートメント
モジュールレベル変数はPublicステートメントを使用してを宣言することもできます。
Public 変数名 As データ型
このように宣言すると、その変数はプロジェクト内のすべてのプロシージャで使用できます。標準モジュールまたはクラスモジュールで宣言すると、その変数が宣言されているプロジェクトを参照するプロジェクトでも使用できます。
Priveteステートメント
モジュールレベル変数はPrivateステートメントを使用してを宣言することもできます。
Private 変数名 As データ型
このように宣言すると、その変数は同じモジュール内のプロシージャのみに制限されます。
おわりに
変数のデータ型は指定して、むやみにバリアント型は使わないようにしましょう。またPublicにすると広範囲からアクセス可能になってしまうので、使用は慎重にすべきです。