Excel VBAの配列のインデックスは0からはじまる

他人の書いた VBA のコードを調べていて初めて知った。

今までずっと VBA の配列のインデックスは 1 始まりだと思ってたんだ。だからたとえば3個の要素を持つ配列についての繰り返しはこんなふうに書いてた。

Dim arr(3)

...

For i = 1 To 3
    MsgBox arr(i)
Next i

これで期待通り動いてたんだから何の疑いも持たずにいた。数あるプログラミング言語の中で 1始まりは少数派かもしれないけど、n 個の要素を持つ配列のインデックスが 1 ~ n というのはわかりやすいともいえる。

だけど、実はインデックス 0 も使えるという。

え?
ということは、配列を Dim arr(3) って宣言するとインデックス 0 から 3 までの4要素の配列ができるってこと?

実際にやってみよう。

Sub TEST()
    Dim arr(3) As String
    
    arr(0) = "Andy"
    arr(1) = "Bill"
    arr(2) = "Charlie"
    arr(3) = "Dave"
    
    For i = 0 To 3
        MsgBox arr(i)
    Next i
End Sub

この TEST マクロを実行すると、たしかに Andy、Bill、Charlie、Dave の4つが順にメッセージボックスに表示される。

うへぇ、なにこの変な仕様。