ReDim ステートメント
プロシージャ レベル で、動的配列変数の記憶域領域を再割り当てするために使用 します。
構文
ReDim [ Preserve ] varname ( subscripts ) [ Astype ], [ varname ( subscripts ) [ Astype ]] . .
ReDim ステートメント構文には、次の指定項目があります。
指定項目 | 説明 |
---|---|
Preserve | オプション。 最後のディメンションのサイズを変更するとき、既存の配列のデータを保持する際に使用されるキーワードです。 |
varname | 必須。 変数の名前です。標準の変数の名前付け規則に従ってください。 |
subscripts | 必須です。 配列変数の次元です。最大 60 までの多次元を宣言できます。
添字引数は、次の構文を使用します。 [下位の To] upper [ , [lowerTo] upper ] . . . lower で明示的に指定していないときには、配列の下限が Option Base ステートメントによって制御されます。 Option Base ステートメントが存在しない場合、下限は 0 になります。 |
type | 省略可能。 変数のデータ型。は、Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (現在サポートされていません)、Date、String (可変長文字列の場合)、Stringlength (固定長文字列の場合)、Object、Variant、ユーザー定義型、またはオブジェクト型のいずれかです。 定義する変数ごとに個別の Astype 句を使用します。 配列を含む Variant の場合、 type は配列の各要素の型を記述しますが、 Variant を 他の型に変更することはありません。 |
解説
ReDim ステートメントは、空のかっこ (ディメンション添字なし) で Private、Public、または Dim ステートメントを使用して、既に正式に宣言されている動的配列のサイズを変更またはサイズ変更するために使用されます。
配列内の要素と次元の数を変更するには、 ReDim ステートメントを繰り返し使用します。 ただし、あるデータ型の配列を宣言することはできません。配列が Variant に含まれていない限り、後で ReDim を使用して配列を別のデータ型に変更できます。 配列が Variant に含まれている場合、Preserve キーワード (keyword)を使用しない限り、As型句を使用して要素の型を変更できます。その場合、データ型の変更は許可されません。
[保持] キーワード (keyword)を使用する場合は、最後の配列ディメンションのみをサイズ変更できます。また、次元の数をまったく変更することはできません。 たとえば、配列に 1 つの次元しかない場合は、その次元のサイズを変更できます。これは、最後の次元と唯一の次元であるためです。 ただし、配列に 2 つ以上の次元がある場合は、最後の次元のサイズのみを変更し、配列の内容を保持することができます。
次の例は、配列に含まれる既存のデータを消去することなく、動的配列の最後の次元のサイズを大きくする方法を示しています。
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
同様に、Preserve を使用する場合、配列のサイズを変更するには、必ず上限を変更する必要があります。下限を変更すると、エラーが発生します。
配列を元のサイズよりも小さくすると、排除された要素のデータは失われます。
変数の初期化時に、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に、固定長文字列は 0 で埋められた文字列に初期化されます。 Variant 変数は、Empty に初期化されます。 ユーザー定義型変数の各要素は、それぞれの要素が個別の変数であるものとして初期化されます。
オブジェクトを参照する変数を使用するには、 Set ステートメントを使用して既存のオブジェクトを割り当てる必要があります。 オブジェクトが割り当てられるまで、宣言された オブジェクト変数 には特別な値 Nothing があり、オブジェクトの特定のインスタンスを参照していないことを示します。
宣言する変数がモジュール レベルまたはプロシージャ レベルに存在しない場合、ReDim ステートメントは宣言型ステートメントとして機能します。 同じ名前の別の変数が後で作成された場合、より広い スコープでも、 ReDim は後の変数を参照し、 Option Explicit が有効であってもコンパイル エラーが発生するとは限りません。 このような競合を回避するために、 ReDim を宣言型ステートメントとして使用するのではなく、単に配列を再初期化するために使用する必要があります。
注:
バリアント型 (Variant) に含まれる配列のサイズを変更するには、その配列のサイズ変更を試みる前に、バリアント型 (Variant) 変数を明示的に宣言する必要があります。
例
この例では、ReDim ステートメントを使用して、動的配列変数に対する記憶域の容量の割り当ておよび再割り当てを行っています。 Option Base は 1 であることを前提としています。
Dim MyArray() As Integer ' Declare dynamic array.
Redim MyArray(5) ' Allocate 5 elements.
For I = 1 To 5 ' Loop 5 times.
MyArray(I) = I ' Initialize array.
Next I
次のステートメントは、配列のサイズを変更し、要素を消去します。
Redim MyArray(10) ' Resize to 10 elements.
For I = 1 To 10 ' Loop 10 times.
MyArray(I) = I ' Initialize array.
Next I
次のステートメントは、配列のサイズを変更し、要素は消去しません。
Redim Preserve MyArray(15) ' Resize to 15 elements.
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。