「Dim」とは「Dimension」の略で、Excel-VBAでは、変数に「どのような値だけが代入されるのを許すか」宣言するために使用します。
なぜ変数の型を指定する必要があるのか?
「指定しなくても使用できるのに?」と思われる方も多いと思いますが、不測の事態等を予防するために、変数の方の指定は必須です。
Excel VBAでは、型を指定しない場合、変数の型はバリアント(Variant)型がデフォルトとなります。バリアント型=全てのデータに対応した変数の型ですので、意図しない値や命令までも、変数の値として処理してしまい、予期せぬ不具合を引き起こす可能性があります。原因を探す「デバッグ(Debug)」を行ったとしても、宣言されていない変数を探すのはとても難しく、特定が困難となります。
また、変数を使用する=PCのメモリの容量を使用することですので、どのような値でも入るようにするために、PC自体もメモリの「空き容量」を多く確保しようと処理することがあります。データの大きさによっては処理速度が非常に低下することがあります。変数の型を指定することにより、PCは「指定された型によって決められた容量」のみを変数に割り当てるだけで良くなりますので、処理速度の向上につながります。
型宣言を強制する方法
上記の理由から、方宣言を強制するのが良いです。この方法には2通りあります。
- マクロ作成前に、VBE(Visual Basic Editor)の「ツール→オプション」の「編集」タブ内の「変数の宣言を強制する」にチェックを入れる。
- モジュールの一番上(「宣言セクション」)に、「Option Explicit」を記入する(マクロ作成中・後でも可)。
これで型宣言していない変数はコンパイルエラーとなり使用できなくなります。
宣言方法
構文例は以下の通りです。
1 |
Dim 変数名 as 変数の型(Boolean,Integer,Long,String,Variant,Date等) |
1 |
Dim 変数名 as オブジェクト名(WorkSheet、Range等) |
as の後には変数の型、あるいはオブジェクト名を指定することができます。
以下はDimを使って型宣言を行った例です。今回は、文字列を格納できる変数String型を使用しました。
1 2 3 4 5 6 7 |
Sub Sample_dim_01() Dim strA as String ' 変数を「String型」に指定 strA = "Excel VBA" Msgbox strA End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Sample_dim_02() '変数を「WorkSheet」という「オブジェクト型」に指定 Dim wsht As Worksheet ' オブジェクトを変数に代入する場合は「Set」を使用する Set wsht = Worksheets("Sheet1") If wsht.Name = "Sheet1" Then wsht.Name = "VBA01" End If Set wsht = Nothing End Sub |
以下のようにすると、一度に複数の変数を宣言することもできます。
1 |
Dim 変数名 as 変数の型, 変数名 as 変数の型,… |
マクロ例(変数の例のみ):
1 2 3 4 5 6 7 8 9 10 |
Sub Sample_dim_03() Dim strA as String, strB as String strA = "Excel" strB = "VBA" Msgbox strA Msgbox strB End Sub |
注意として
1 |
Dim a, b, c as String |
と宣言した場合、最後の変数「c」のみがString型で、他の変数「a,b」はデフォルトの「バリアント型」となってしまい、型を宣言していないのと同じ状態となります。
Excel-VBAでは、「Dim」を使用しなくても変数を使用できますが、プログラムでは(どの言語でも)変数は必ず型を指定して使用するのが一般的です。
まとめ
今回はVBAで変数を宣言する「Dim」をご紹介しました。VBA使用の際に必ず必要な知識ですので、ぜひ覚えておきましょう。