2014年6月28日土曜日

VBAの繰り返し処理内で変数を定義しても、2回目以降が初期化されない

VBAの繰り返し処理内で変数を定義しても、初期化は初回だけで2回目以降が初期化されない。
初回だけは初期化されているので誤魔化されてしまうため、余計に注意が必要です。

Dim i As Integer
For i = 1 To 5
  ' 繰り返し処理内で変数定義
  Dim Value1 As String ' 初期化されない!
  Dim Value2 As Integer ' 初期化されない!
  If i Mod 2 = 0 Then
    ' 偶数
    Value1 = CStr(i)
    Value2 = i
  End If

  Debug.Print i & "回目" & vbTab & Value2 & vbTab & Value2
Next


<処理結果>
1回目 0 0 ← 初期化されている
2回目 2 2
3回目 2 2 ← 初期化されていない!
4回目 4 4
5回目 4 4 ← 初期化されていない!