ReDim ステートメント (Visual Basic)ReDim Statement (Visual Basic)

配列変数の記憶域を再割り当てします。Reallocates storage space for an array variable.

構文Syntax

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]  

指定項目Parts

用語Term 定義Definition
Preserve 任意。Optional. 最後の次元のサイズだけを変更したときに、既存の配列のデータを保持するために使用する修飾子Modifier used to preserve the data in the existing array when you change the size of only the last dimension.
name 必須。Required. 配列変数名。Name of the array variable. 参照してください宣言された要素の名前です。See Declared Element Names.
boundlist 必須。Required. 再定義された配列の各次元の境界を一覧表示します。List of bounds of each dimension of the redefined array.

コメントRemarks

ReDim ステートメントを使用し、既に宣言されている配列の 1 つまたは複数の次元のサイズを変更できます。You can use the ReDim statement to change the size of one or more dimensions of an array that has already been declared. 大きな配列があり、その要素の一部が必要ない場合、ReDim で配列のサイズを減らし、メモリを解放できます。If you have a large array and you no longer need some of its elements, ReDim can free up memory by reducing the array size. 一方で、配列に要素を追加する必要がある場合、ReDim は要素を追加できます。On the other hand, if your array needs more elements, ReDim can add them.

ReDim ステートメントは配列のみを対象としています。The ReDim statement is intended only for arrays. スカラー (単一の値のみが含まれる変数)、コレクション、構造体では有効ではありません。It's not valid on scalars (variables that contain only a single value), collections, or structures. Array 型の変数を宣言する場合、ReDim ステートメントには新しい配列を作成するために十分な型情報が与えられません。Note that if you declare a variable to be of type Array, the ReDim statement doesn't have sufficient type information to create the new array.

ReDim はプロシージャ レベルでのみ使用できます。You can use ReDim only at procedure level. そのため、変数の宣言コンテキストはプロシージャにする必要があります。ソース ファイル、名前空間、インターフェイス、クラス、構造体、モジュール、ブロックにすることはできません。Therefore, the declaration context for the variable must be a procedure; it can't be a source file, a namespace, an interface, a class, a structure, a module, or a block. 詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。For more information, see Declaration Contexts and Default Access Levels.

ルールRules

  • 複数の変数。Multiple Variables. 同じ宣言ステートメントで複数の配列変数のサイズを変更し、各変数の name 部分と boundlist 部分を指定できます。You can resize several array variables in the same declaration statement and specify the name and boundlist parts for each variable. 複数の変数を指定するときは、コンマで区切ります。Multiple variables are separated by commas.

  • 配列の境界。Array Bounds. boundlist の各エントリでその次元の上限と下限を指定できます。Each entry in boundlist can specify the lower and upper bounds of that dimension. 下限は常に 0 (ゼロ) です。The lower bound is always 0 (zero). 上限は次元の長さ (上限に 1 を足したもの) ではなく、その次元で可能な最大インデックス値です。The upper bound is the highest possible index value for that dimension, not the length of the dimension (which is the upper bound plus one). 各次元のインデックスは 0 ~ 上限値の範囲で変わります。The index for each dimension can vary from 0 through its upper bound value.

    boundlist の次元数は配列の次元の元の数 (r順位) に一致する必要があります。The number of dimensions in boundlist must match the original number of dimensions (rank) of the array.

  • データ型。Data Types. ReDim ステートメントでは、配列変数またはその要素のデータ型を変更できません。The ReDim statement cannot change the data type of an array variable or its elements.

  • 初期化します。Initialization. ReDim ステートメントは配列要素の新しい初期化値を提供できません。The ReDim statement cannot provide new initialization values for the array elements.

  • ランク付けします。Rank. ReDim ステートメントは配列の順位 (次元数) を変更できません。The ReDim statement cannot change the rank (the number of dimensions) of the array.

  • サイズ変更と保持します。Resizing with Preserve. Preserve を使用する場合、配列の最後の次元だけのサイズを変更できます。If you use Preserve, you can resize only the last dimension of the array. 他のすべての次元については、既存の配列の境界を指定する必要があります。For every other dimension, you must specify the bound of the existing array.

    たとえば、配列に次元が 1 つだけある場合、その次元のサイズを変更し、配列のすべてのコンテンツを保持できます。最後で唯一の次元を変更するためです。For example, if your array has only one dimension, you can resize that dimension and still preserve all the contents of the array, because you are changing the last and only dimension. ただし、配列に次元が 2 つ以上あるときは、Preserve を使用する場合、最後の次元だけのサイズを変更できます。However, if your array has two or more dimensions, you can change the size of only the last dimension if you use Preserve.

  • プロパティ。Properties. 値の配列を保持するプロパティで ReDim を使用できます。You can use ReDim on a property that holds an array of values.

動作Behavior

  • 配列置換。Array Replacement. ReDim 既存の配列を解放し、同じランクを持つ新しい配列を作成します。ReDim releases the existing array and creates a new array with the same rank. 新しい配列は配列変数で解放された配列に取って代わります。The new array replaces the released array in the array variable.

  • 保持しない初期化。Initialization without Preserve. Preserve を指定しない場合、ReDim はそのデータ型の既定値を使用し、新しい配列の要素を初期化します。If you do not specify Preserve, ReDim initializes the elements of the new array by using the default value for their data type.

  • 保持する初期化します。Initialization with Preserve. Preserve を指定する場合、Visual Basic は既存の配列から新しい配列に要素をコピーします。If you specify Preserve, Visual Basic copies the elements from the existing array to the new array.

Example

次の例では、配列の既存データを失うことなく動的配列の最後の次元のサイズを増やし、その後、一部のデータを損失しサイズを減らします。The following example increases the size of the last dimension of a dynamic array without losing any existing data in the array, and then decreases the size with partial data loss. 最後に、サイズを減らして元の値に戻し、すべての配列要素を再初期化します。Finally, it decreases the size back to its original value and reinitializes all the array elements.

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 つの次元を持つ新しい配列を作成します。The Dim statement creates a new array with three dimensions. 各次元は 10 の境界で宣言されます。そのため、各次元の配列インデックスの範囲は 0 ~ 10 になります。Each dimension is declared with a bound of 10, so the array index for each dimension can range from 0 through 10. 次の説明では、3 つの次元が「層」、「行」、「列」になります。In the following discussion, the three dimensions are referred to as layer, row, and column.

最初の ReDim は、変数 intArray の既存の配列を置換する新しい配列を作成します。The first ReDim creates a new array which replaces the existing array in variable intArray. ReDim は既存の配列から新しい配列にすべての要素をコピーします。ReDim copies all the elements from the existing array into the new array. また、さらに 10 個の列を各層の各行の終わりに追加し、これらの列の要素を 0 (配列の要素型である Integer の初期値) に初期化します。It also adds 10 more columns to the end of every row in every layer and initializes the elements in these new columns to 0 (the default value of Integer, which is the element type of the array).

2 番目の ReDim は新しい配列をもう 1 つ作成し、適合するすべての要素をコピーします。The second ReDim creates another new array and copies all the elements that fit. ただし、5 つの列がすべての層のすべての行の終わりから失われます。However, five columns are lost from the end of every row in every layer. これらの列を使用して完了した場合、これは問題ではありません。This is not a problem if you have finished using these columns. 大きな配列のサイズを減らし、不要になったメモリを解放できます。Reducing the size of a large array can free up memory that you no longer need.

3 番目の ReDim は新しい配列をもう 1 つ作成し、すべての層のすべての行の終わりから別の 5 つの列を削除します。The third ReDim creates another new array and removes another five columns from the end of every row in every layer. このとき、既存の要素はコピーされません。This time it does not copy any existing elements. このステートメントは配列を元のサイズに戻します。This statement reverts the array to its original size. ステートメントに Preserve 修飾子が含まれないため、すべての配列要素が元の初期値に設定されます。Because the statement doesn't include the Preserve modifier, it sets all array elements to their original default values.

その他の例では、次を参照してください。配列です。For additional examples, see Arrays.

関連項目See Also

IndexOutOfRangeException
Const ステートメントConst Statement
Dim ステートメントDim Statement
Erase ステートメントErase Statement
NothingNothing
配列Arrays