Option Explicitステートメントを使用して、宣言した変数のみ使用することを強制する。

VBAで変数を使用する時、DimありとDimなしを意識していなかった。本を読んでいて違いを把握したので残しておく。

VBAは、ある条件では、変数を使用する時に、Dimを使っても、使わなくても動作する。
例えば、Dimを使用しない以下のような「5と6を足し算した結果をメッセージボックスに表示する」コードも動作する。
しかし、以下のコードを実行するとメッセージボックスには11ではなく、5が表示される。
6を代入している変数はnum2だが、Totalに使用しているのは、num2ではなくて、スペル誤りのnum1だからだ。
つまり、変数のスペルが誤っていてもエラーとならないため、処理結果が誤っている時にバグを探すのが大変になることがある。


Sub testOptionExplicit()

    num = 5
    num2 = 6
    
    Total = num + num1
    MsgBox Total
End Sub

それを予防するために、Option Explicitステートメントを使用する。
このステートメントを使用すると、「Dimを用いて変数宣言していない変数は使用できない」という変数の宣言を強制することができる。
先に書いたコードを修正して実行すると、num1が変数宣言していないため、VBEがコンパイルエラーとしてメッセージを出力してくれる。
つまり、処理結果が出る前にバグに気づける。


Option Explicit
Sub testOptionExplicit()

    Dim num As Integer: num = 5
    Dim num2 As Integer: num2 = 6
    
    Total = num + num1
    MsgBox Total
End Sub

Option Explicitステートメントは、毎回記述するのは手間なので、VBEのオプションでデフォルトで設定しておくと便利。
やり方は、VBEの[ツール]-[オプション]を選択して、「編集」タブの「変数の宣言を強制する」チェックボックスにチェックを付ける。

VBA 7.1で動作確認。

コメント

タイトルとURLをコピーしました