ReDimステートメントの使い方

ReDimステートメント:

プロシージャレベルで使用され、動的配列変数の記憶領域を再割り当てします。

ステートメント

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

ReDim [Preserve] varname(下付き) [****型] [, varname(添え) [****型]] . . .

次にはReDimステートメントの構文を説明します。

説明

Preserveオプション。 最後の配列の次元のサイズを変更するとき、既存の配列のデータを保持する際に使用されるキーワードです。

varname必須。 変数の名前です。標準的な変数の名前付けルールに従ってください。

subscripts必須。 配列変数の次元です。最大 60 までの多次元を宣言できます。 添字引数には、次の構文を使用します。

[lower To] upper [,[lower To] upper] . . .

lower で明示的に指定していないときには、配列の下限が Option Base ステートメントによって制御されます。 Option Base ステートメントが存在しない場合、下限は 0 になります。

type省略可能。 変数のデータ型です。Byte、 Boolean、 Integer、 Long、 Currency、 Single、 Double、 Decimal (現時点ではサポートされていません)、日付、文字列(文字列の内容が増える場合) 、文字列の長さ(文字列の長さが固定される場合)、 object、 Variant、ユーザー定義型、またはオブジェクト型。定義する変数**** ごとに、 type句を個別に使用します。 配列を含むバリアント型 (variant ) の場合は、配列の各要素の型を説明しますが、バリアント型 ( variant ) は他の型には変更できません。

解説

ReDimステートメントは、 Private、 Public、またはDim ステートメント (次元の添字なし) を使用して、既に正式に宣言されている動的配列のサイズを変更したり、サイズを変更したりするために使用します。

ReDimステートメントを繰り返し使用して、配列内の要素と次元の数を変更できます。 ただし、配列がバリアント型 ( Variant) に含まれていない場合は、1つのデータ型の配列を宣言してから、 ReDimを使用して配列を別のデータ型に変更できません。 配列がVariantに含まれている場合、 As type句を使用して要素の型を変更できます。ただし、 Preserveキーワードを使用している場合は、データ型の変更は許可されません。

Preserveキーワードを使用した場合、最後の配列の次元のサイズのみを変更でき、次元の数を変更することはできません。 たとえば、配列にディメンションが1つしかない場合は、ディメンションのサイズを変更することができます。 ただし、配列に2つ以上の次元がある場合は、最後の次元のサイズのみを変更して、配列の内容を保持することができます。

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

同様に、Preserve を使用する場合、配列のサイズを変更するには、必ず上限を変更する必要があります。下限を変更すると、エラーが発生します。

配列を元のサイズよりも小さくすると、排除された要素のデータは失われます。アドレスによって配列をプロセスに渡す場合は、プロセス内の配列の次元のサイズを再定義しないでください。

変数の初期化時に、数値変数は0にし、文字列は長さが0の文字列 (“”) にし、長さが固定された文字列は 0 で埋められた文字列に初期化されます。 Variant 変数は、Empty に初期化されます。 ユーザー定義型変数の各要素は、それぞれの要素が個別の変数であるものとして初期化されます。オブジェクトを参照する変数を使用する前に、Setステートメントを使用して既存のオブジェクトを変数に割り当てる必要があります。割り当てられる前に、宣言されたオブジェクト変数には特定の値Nothingがあります。Nothingキーワードは任意のデータ型の既定値を表します。

ヒント:ReDimステートメントは、宣言された変数がモジュールレベルまたはプロシージャレベルに存在しない場合、このステートメントは宣言ステートメントとします。 後で同じ名前を持つ別の変数が作成されると、 ReDimは以降の変数を参照します。 Option Explicitが有効になっていても、必ずしもコンパイルエラーを引き起こすことはありません。 このような競合を回避するには、 ReDimを宣言的なステートメントとして使用しないでください。ただし、単に配列を再設定する必要があります。

注意点:バリアント型 (Variant) に含まれる配列のサイズを変更するには、その配列のサイズ変更を試みる前に、バリアント型 (Variant) 変数を明示的に宣言する必要があります。

ReDimステートメントの例

この例では、ReDim ステートメントを使用して、動的配列変数に対する記憶域の容量の割り当ておよび再割り当てを行っています。 Option Base は 1 であることを前提としています。

Dim MyArray() As Integer '動的配列を宣言します。
Redim MyArray(5) '5つの要素を割り当てます。
For I = 1 To 5 '5回に繰り返します。
MyArray(I) = I '配列を初期化します。
Next I

次のステートメントは、配列のサイズを変更し、要素を消去します。

Redim MyArray(10) 'サイズを10個の要素に変更します。
For I = 1 To 10 '10回に繰り返します。
MyArray(I) = I '配列を初期化します。
Next I

次のステートメントは、配列のサイズを変更し、要素を消去しません。

Redim Preserve MyArray(15) 'サイズを15個の要素に変更します。
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です