配列のサイズを変更するときに、
Redim と一緒に使って、配列の内容を保持するように指定します。
構文:
記述:
Redim と共に使うと、配列のサイズを変更するときに、データは、リセットされずに、保持されます。
これは、配列のサイズを拡大するとき、その新しいデータ部分だけがリセットされることを意味します。
古いデータ部分は、同じままで残っています。(ただしメモリの絶対アドレスは、同じとは限りません。)
注意:
Redim Preserve は、すべての場合で、予想されるように働くとはかぎりません。:
Preserveの現在の動作は、メモリ内で元のデータを連続したままに保って、メモリのサイズを拡大または切り捨てるだけです。
(サイズ変更が不可能な場合は、最初に、元のデータブロック全体が別のメモリ位置に移動されます。)
その動作(1次元で)は、上限が変更された場合にのみ明確に定義されます。
下限が変更された場合、現在の結果は、データが新しい下限で開始するように効果的にシフトされます。
複数の次元の場合、安全に変更できるのは、最初の次元の上限だけです。
最初の次元が縮小されると、既存のマッピング可能なデータが失われる可能性があります。
下位次元のサイズを変更すると、結果は予測できません。
(多次元配列は、行優先順序で格納されるからです。異なる値が連続しているのは最後のインデックスだけです。)
例:
ReDim array(1 To 3) As Integer
Dim i As Integer
array(1) = 10
array(2) = 5
array(3) = 8
ReDim Preserve array
(1 To 10)
For i = 1 To 10
Print "array("; i; ") = ";
array
(i)
Next
Sleep
QBからの違い:
-
Preserve は、PDS 7.1 までサポートされませんでした。
参照: