変数宣言に関する勘違い(大失敗談)

f:id:Infoment:20190824134028p:plain


変数は、同一プロシージャ内で複数回宣言するとエラーになる。

f:id:Infoment:20190824132126p:plain

しかしこのようにループ(繰り返し処理)の中で宣言すると、エラーにならない。

Sub Test()
    Dim i As Long
        For i = 1 To 10
            Dim j As Long
        Next
End Sub

また、変数は宣言直後は、変数の型毎に定められた初期値がセットされる。

以上のことから私は、安直にも、次のように早合点してしまった。
・ループ内で宣言した場合、変数は都度リセットされる。

しかし、そんなことは無い訳で。例えば、こちらで試してみよう。

Sub Test_2()
    Dim i As Long
        For i = 1 To 10
            Dim sum As Long
                sum = sum + 1
                Cells(i, 1) = sum
            Dim Flag As Boolean
                Flag = Not Flag
                Cells(i, 2) = Flag
            Dim myDate As Date
                myDate = myDate + 1
                Cells(i, 3) = myDate
            Dim str As String
                str = str & i
                Cells(i, 4) = str
        Next
End Sub

結果は、以下の通り。
f:id:Infoment:20190824132636p:plain

今回試した長整数型、論理型、日付型、文字列型のいずれの場合も、しっかりと値が保持されている。

きっかけとして、先日業務で「有り得ない処理結果」が得られ、初めて気が付いた次第。今までは冒頭で固めて宣言しており、ループ内で宣言し始めたのはごく最近のこと。従って、過去の処理結果に問題は無いと思われるが・・・この時ばかりは冷や汗が2リットルほど背中を伝ったのでした。

参考まで。