変数を宣言する
変数は使用するには、使用する前に変数を宣言するのが一般的です。変数はDimステートメントを使って宣言します。基本の構文は次の通りです。
Dim 変数名 As データ型
複数の変数を1行で宣言する場合はカンマで区切ります。
Dim 変数名1 As データ型, 変数名2 As データ型, 変数名3 As データ型, ...
「As データ型」の部分は省略できます。省略するとバリアント型とみなされます。変数名は次の名前付け規則に従う必要があります。
- 変数名には英数字、漢字、ひらがな、カタカナ、アンダースコア(_)を使用できる。ただし、先頭に数字を使うことはできない。
- スペース、ピリオド(.)、感嘆符(!)、「@」、「&」、「$」、「#」は使用することが出来ない。
- 長さは半角255文字以内にする。
- VBAの関数、ステートメント、メソッド、組み込み定数など、すでに使用されている名前と同じ名前は使わない。
- 変数名の大文字と小文字は区別されないため、ケースだけ異なる名前を使用しない。
データ型
変数のデータ型としてよく使用されるものには次のものがあります。
データ型 | 値の範囲 |
---|---|
バイト型(Byte) | 0〜255の正の整数値を格納 |
ブール型(Boolean) | TrueまたはFalseを格納 |
整数型(Integer) | -32768〜32767の整数値を格納 |
長整数型(Long) | -2147483648〜2147483647の整数値を格納 |
単精度浮動小数点数型(Single) | 小数点を含む数値を格納 -3402823E38〜-1.401298E-45(負の値) 1.401298E-45〜3402823E38(正の値) |
倍精度浮動小数点数型(Double) | 単精度浮動小数点数型より大きい小数点を含む数値を格納 -1.7976931348623E308〜-4.94065645841247E-324(負の値) 4.94065645841247E-324〜1.7976931348623E308(正の値) |
通貨型(Currency) | 15桁の整数部分と4桁の小数部分を持つ数値を格納 -922337203685477.5808〜922337203685477.5807 |
日付型(Date) | 日時を表す値を格納 西暦100年1月1日〜西暦9999年12月31日 |
オブジェクト型(Object) | オブジェクトの参照を格納 |
文字列型(String) | 文字列を保存する |
バリアント型(Variant) | すべてのデータ型を格納できる型 |
変数の宣言を強制する
VBAで変数の宣言は必須ではありませんが、宣言した変数しか使用できないように強制することもできます。それにはOption Explicitステートメントをモジュールの先頭部分の宣言セクションに記述します。

モジュールを追加したときに自動的にOption Explicitステートメントが追加されるように設定することもできます。それには[ツール]>[オプション]で表示されるオプションダイアログで[編集]タブを選択し[変数の宣言を強制する]のチェックボックスにチェックを入れます。
変数は宣言して使用するのが一般的です。変数を宣言することにより、どのような変数を使うつもりなのか、コードを読む人に伝えることができます。例えばコード中に似た名前の変数が出てきた場合、変数をタイプミスしたのか、新しい変数を使おうとしているかは、コードを理解しないと判断できません。さらに変数の宣言を強制するようにしておくと、変数のタイプミスはエラーとなりますので、コーディングミスを減らすことができます。
プロシージャレベルの変数とモジュールレベル変数
プロシージャ内でDimステートメントを使って変数を宣言すると、その変数はプロシージャの中でのみ使用できます。これはプロシージャレベル変数と呼ばれます。
モジュールの一番先頭の宣言セクションで宣言されると、その変数はモジュール内のすべてのプロシージャから使用できます。これはモジュールレベル変数と呼ばれます。
Publicステートメント
モジュールレベル変数はPublicステートメントを使用してを宣言することもできます。
Public 変数名 As データ型
このように宣言すると、その変数はプロジェクト内のすべてのプロシージャで使用できます。標準モジュールまたはクラスモジュールで宣言すると、その変数が宣言されているプロジェクトを参照するプロジェクトでも使用できます。
Priveteステートメント
モジュールレベル変数はPrivateステートメントを使用してを宣言することもできます。
Private 変数名 As データ型
このように宣言すると、その変数は同じモジュール内のプロシージャのみに制限されます。
おわりに
変数のデータ型は指定して、むやみにバリアント型は使わないようにしましょう。またPublicにすると広範囲からアクセス可能になってしまうので、使用は慎重にすべきです。