変数宣言に関する勘違い(大失敗談)
変数は、同一プロシージャ内で複数回宣言するとエラーになる。
しかしこのようにループ(繰り返し処理)の中で宣言すると、エラーにならない。
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
結果は、以下の通り。
今回試した長整数型、論理型、日付型、文字列型のいずれの場合も、しっかりと値が保持されている。
きっかけとして、先日業務で「有り得ない処理結果」が得られ、初めて気が付いた次第。今までは冒頭で固めて宣言しており、ループ内で宣言し始めたのはごく最近のこと。従って、過去の処理結果に問題は無いと思われるが・・・この時ばかりは冷や汗が2リットルほど背中を伝ったのでした。
参考まで。