最近、どうも Redim というキーワードで検索が多いようだ。よって、Redimネタをひとつ。

Dim a() As Integer

と定義し、

Redim a(10) と再定義したとき、配列はどのように確保されるでしょうか?

1. a(1) ~ a(10) の 10個
2. a(0) ~ a(9) の 10個
3. a(0) ~ a(10) の 11個

さて、どうだろう。

まず、C言語等をされている方は 2. かなと思われるかも知れない。が、配列は「指定した値まで」確保するので 2. は間違い。
1. か 3. か。これはこの条件だけでは正確な答えは出せないのだ。

VBAには配列の下限を決める宣言がある。 Option Base だ。
Option Base 0 とすれば配列は 0 から、Option Base 1 とすれば配列は 1 から開始する。よって、

Option Base 0 なら 3. が正解。Option Base 1 なら 1. が正解になる。デフォルトは、というと Option Base 0 である。

私自身は基本は Option Base 0 を使っている。値自体は1から入れるのだが、配列のソートをする際に 0 の領域をスワップエリアとして使うことが多い。
Option Base 1 は、Redim とはちょっと違うが、Excelのシートとやりとりするとき。バリアント型にがさっ、と突っ込むが、セルの列、行とインデックスを合わせられるので簡単になっていい。