【VBA】モジュールレベル変数の注意点
VBAではプログラムを記述する際、モジュールレベルで変数を定義することができます。
このモジュールレベル変数は、モジュール内のどこからでも参照ができるので、複数のプロシージャ間でデータをやり取りするのに便利です。
便利な変数ですが、使う上で1つ注意して欲しいことがあります。
モジュールレベル変数の中身は実行後も残る
モジュールレベル変数は、プログラムの実行が終了しても値が保持されることを覚えておく必要があります。
たとえば、次のようにモジュールレベルで変数を宣言したとします。
Option Explicit
Private counter As Integer
Sub IncrementCounter()
counter = counter + 1
Debug.Print "カウンターの値: " & counter
End Sub
このコードを複数回実行すると、counter の値は実行されるたびに増加していきます。
これは、counter が実行終了後もその値を保持するためです。
つまり、一度設定された変数は次に使用するまで同じ値を保持し続けます。
この挙動は一見便利に思えることもありますが、意図しない値の保持によって予想外の動作を引き起こすことがあります。
そのため、モジュールレベル変数を使用する際は、最初に値を初期化することが重要です。