RedimPreserveは要素を保持したまま要素数を増やすことが多いと思います。
開発案件で、配列arr(1 to 5)から、arr(3)~arr(5)を抜き出したい案件がありました。
配列をForで回し、3~5を入れなおすの面倒だなぁ。
そうだ。インデックス番号変更したらFilter関数的な動きをするのでは???
→試す→できませんでした!
RedimPreserveはフィルタの動きは出来ずインデックス番号が変わるだけ
Public Sub sample()
Dim arr As Variant
ReDim arr(1 To 5)
arr(1) = 1
arr(2) = 2
arr(3) = 3
arr(4) = 4
arr(5) = 5
ReDim Preserve arr(3 To 5)
'■結果
'arr(3)→1
'arr(4)→2
'arr(5)→3
'■以下のような甘い動作を期待していた
'arr(3)→3
'arr(4)→4
'arr(5)→5
End Sub
まとめ
- 甘い期待はせず、ちゃんとForでLoopして入れなおしましょう。



コメント