ReDim ステートメント (Visual Basic)
アレイ変数の記憶域を再割り当てします。
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
指定項目
語句 |
定義 |
---|---|
Preserve |
省略可能です。 最後の次元の大きさを変更するときに、配列に既に格納されている値をそのまま保持しておく必要がある場合に指定する修飾子です。 |
name |
必須です。 配列変数の名前を指定します。 「宣言された要素の名前 (Visual Basic)」を参照してください。 |
boundlist |
必須です。 再定義する配列の各次元の境界を示すリストを指定します。 |
解説
ReDim ステートメントを使用すると、既に宣言された配列の 1 つ以上の次元のサイズを変更できます。 使用している大きな配列の一部の要素が不要になった場合、ReDim を使って配列のサイズを減らし、メモリを解放できます。 一方で、開発者の配列がより多くの要素が必要な場合は、ReDim 追加できます。
ReDim は、配列だけに使用するためのステートメントです。 これは単一の値だけを含むスカラー (変数)、コレクション、または構造体に無効です。 Array型の変数を宣言した場合 ReDim のステートメントに新しい配列を作成するための十分な型情報がないことに注意してください。
ReDim キーワードを使用できるのはプロシージャ レベルだけです。 したがって、変数の申告のコンテキストはプロシージャである必要があります; これは、ソース ファイル、名前空間、インターフェイス、クラス、構造体、モジュール、またはブロックでは宣言できません。 詳細については、「宣言コンテキストと既定のアクセス レベル (Visual Basic)」を参照してください。
規則
複数の変数。同じ申告のステートメントで複数の配列変数のサイズを変更し、変数ごとに name と boundlist の一部を指定できます。 複数の変数を指定するときは、コンマ (,) で区切ります。
配列の境界。boundlist の各エントリには、次元の下限と上限を指定できます。 下部境界は常に 0 (ゼロ) になります。 上の境界は、ディメンション、(1 ~ 上限) の長さのサイズのインデックス値ディメンションです。 各次元のインデックスは 0 から上限のバインド値によって異なることがあります。
boundlist のディメンションは、配列の次元数 (ランク) の元の数と一致する必要があります。
データ型。ReDim のステートメントは、配列変数または要素のデータ型を変更できません。
初期化。ReDim ステートメントには、配列要素を初期化する新しい値を指定できます。
ランク。ReDim ステートメントで配列のランク (次元数) を変更することはできません。
Preserve を使ったサイズ変更。Preserveを使用すると、配列の最後の次元だけサイズを変更できます。 そのほかのすべてのディメンションでは、既存の配列の境界を指定する必要があります。
たとえば、次元が 1 つしかない配列の場合、その次元はただ 1 つの次元なので、その次元のサイズを変更しても配列の内容を保持できます。 しかし、次元が 2 つ以上ある配列の場合に Preserve キーワードを指定すると、最後の次元のサイズだけを変更できます。
プロパティ。ReDim ステートメントは、値の配列を保持するプロパティに対して使用できます。
[動作]
配列の置換。ReDim ステートメントは既存の配列を解放し、同じランクを持つ配列を新規作成します。 配列変数の中で、新しい配列は、解放された配列に置き換わります。
Preserve を使わない初期化。Preserveを指定しない場合、ReDim は、データ型の既定値を使用して新しい配列の要素を初期化します。
Preserve を使った初期化。Preserveを指定した場合、Visual Basic は、既存の配列から新しい配列に要素をコピーします。
使用例
まず配列内の既存のデータを保持しながら動的配列の最後の次元のサイズを増加し、次に一部のデータを喪失しながらサイズを小さくするコード例は、次のとおりです。 最終的に、このコードではサイズを元の値にまで縮小し、すべての配列要素を再初期化します。
Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)
Dim のステートメントは、3 種類のディメンションの新しい配列を作成します。 各ディメンションは 10 の境界で宣言されるため、各次元の配列のインデックスは、範囲からできます。0 ~ 10. 以下の説明では、3 種類のディメンションは、レイヤー、行、および列と呼ばれます。
最初の ReDim は、新しい配列を作成し、変数 intArray 内の既存の配列に置き換えます。 ReDim は、既存の配列からすべての要素を新しい配列にコピーします。 また、各次元においてすべての行の最後に 10 列を追加し、0 にこれらの列の要素を初期化 (配列の要素型です) Integerの既定値です。
2 番目の ReDim は、別の配列を作成し、に収まるすべての要素をコピーします。 ただし、各次元の各行の最後から 5 列分が失われます。 これらの列が未使用の場合は問題ありません。 大規模な配列のサイズを縮小することで、不要になったメモリを解放できます。
3 番目の ReDim は、別の配列を作成し、各次元においてすべての行の最後からさらに 5 列を削除します。 今回は、既存の要素をコピーしません。 このステートメントで、配列は元に返します。 ステートメントは Preserve 修飾子がないため、元の既定値にすべての配列要素を設定します。
その他の例については、「Visual Basic における配列」を参照してください。