他人の書いた 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つが順にメッセージボックスに表示される。
うへぇ、なにこの変な仕様。