配列の再定義に ReDim と ReDim Preserve がある。

○配列の定義
例えば

Dim sVal(5) As String

こう定義されていれば、配列の要素が(Option Baseの指定にもよるけれど、標準では)、0 から 5 の 6 つ使える状態になる。
この配列を処理中に「要素を 11 にしたい」と思っても

ReDim sVal(10)

などと書いても駄目である。つまり、再定義ができない。はじめに固定値で配列を確保しているからだ。


○配列の再定義
配列を再定義できる、つまりReDimが使えるのはあくまでも

Dim sVal() As String

というように、要素数を未定義にしている場合に限るのだ。

これを処理の途中で
ReDim sVal(10)
ReDim sVal(8)
とか、要素数を何度も再定義することができる

○再定義の種類
ReDim は、それまでに確保していた内容をクリアしてしまう。しかし、ReDim Preserve は1度確保した内容を保持したまま(減らした場合で、確保されなくなったところは別ですよ)要素数を変更できる

データを読み込み、必要に応じて配列を増やしていく、といった場合は ReDim Preserve でなければならない。じゃあ、ReDim って何のためにあるのか?と言われると、私自身は ReDim Preserve ばかり使用するので「こういう使い方をするといいよ」とは、回答できないでいる。