Excel VBAの変数を宣言する方法:Dim

「Dim」とは「Dimension」の略で、Excel-VBAでは、変数に「どのような値だけが代入されるのを許すか」宣言するために使用します。

なぜ変数の型を指定する必要があるのか?

「指定しなくても使用できるのに?」と思われる方も多いと思いますが、不測の事態等を予防するために、変数の方の指定は必須です。

Excel VBAでは、型を指定しない場合、変数の型はバリアント(Variant)型がデフォルトとなります。バリアント型=全てのデータに対応した変数の型ですので、意図しない値や命令までも、変数の値として処理してしまい、予期せぬ不具合を引き起こす可能性があります。原因を探す「デバッグ(Debug)」を行ったとしても、宣言されていない変数を探すのはとても難しく、特定が困難となります。

また、変数を使用する=PCのメモリの容量を使用することですので、どのような値でも入るようにするために、PC自体もメモリの「空き容量」を多く確保しようと処理することがあります。データの大きさによっては処理速度が非常に低下することがあります。変数の型を指定することにより、PCは「指定された型によって決められた容量」のみを変数に割り当てるだけで良くなりますので、処理速度の向上につながります。

型宣言を強制する方法

上記の理由から、方宣言を強制するのが良いです。この方法には2通りあります。

  1. マクロ作成前に、VBE(Visual Basic Editor)の「ツール→オプション」の「編集」タブ内の「変数の宣言を強制する」にチェックを入れる。
  2. モジュールの一番上(「宣言セクション」)に、「Option Explicit」を記入する(マクロ作成中・後でも可)。

これで型宣言していない変数はコンパイルエラーとなり使用できなくなります。

宣言方法

構文例は以下の通りです。

Dim 変数名 as 変数の型(Boolean,Integer,Long,String,Variant,Date等)
Dim 変数名 as オブジェクト名(WorkSheet、Range等)

as の後には変数の型、あるいはオブジェクト名を指定することができます。

以下はDimを使って型宣言を行った例です。今回は、文字列を格納できる変数String型を使用しました。

Sub Sample_dim_01()
    Dim strA as String ' 変数を「String型」に指定
	
    strA = "Excel VBA"
    Msgbox strA

End Sub
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

以下のようにすると、一度に複数の変数を宣言することもできます。

Dim 変数名 as 変数の型, 変数名 as 変数の型,…

マクロ例(変数の例のみ):

Sub Sample_dim_03()
    Dim strA as String, strB as String
	
    strA = "Excel"
    strB = "VBA"

    Msgbox strA
    Msgbox strB

End Sub

注意として 

Dim a, b, c as String

と宣言した場合、最後の変数「c」のみがString型で、他の変数「a,b」はデフォルトの「バリアント型」となってしまい、型を宣言していないのと同じ状態となります。

Excel-VBAでは、「Dim」を使用しなくても変数を使用できますが、プログラムでは(どの言語でも)変数は必ず型を指定して使用するのが一般的です。

まとめ

今回はVBAで変数を宣言する「Dim」をご紹介しました。VBA使用の際に必ず必要な知識ですので、ぜひ覚えておきましょう。