バリアント型変数に格納されたオブジェクト
オブジェクトはバリアント変数に格納できます。これは、オブジェクトなどのさまざまなデータ型を効率的に処理する必要がある場合に役立ちます。たとえば、配列内のすべての要素は同じデータ型でなければなりません。オブジェクトを他のデータ型と一緒に同じ配列に格納するには、配列のデータ型をバリアントに設定します。
配列
他の言語でのプログラミングの経験がある場合は、配列の概念に精通している必要があります。配列のおかげで、同じ名前を持つ一連の変数を参照し、それらを数値的に (インデックス付きで) 識別することができます。多くの場合、配列を使用すると、インデックス値を使用してループを設計し、複数の状況を効率的に処理できるため、プログラムを短縮および簡素化できます。配列には上限と下限があり、配列の要素は上限と下限内で連続しています。 Visual Basic は各インデックス値に領域を割り当てるため、非現実的に大きい配列を宣言しないでください。
このセクションで説明する配列は、プログラム内で宣言された変数の配列であることに注意してください。これらは、デザイン時にコントロールの Index プロパティを設定することによって指定されるコントロール配列とは異なります。変数配列は常に連続しており、制御配列とは異なり、配列要素を配列の途中からロードまたはアンロードすることはできません。
配列内のすべての要素は同じデータ型を持ちます。もちろん、データ型がバリアントの場合、各要素にはさまざまな種類のデータ (オブジェクト、文字列、値など) を含めることができます。ユーザー定義型 (第 8 章「再度プログラミング」の「独自のデータ型の作成」を参照) やオブジェクト変数 (第 9 章「オブジェクトを使用したプログラミング」を参照) を含む、任意の基本データ型の配列を宣言できます。
Visual Basic には、常に同じサイズを保つ固定サイズの配列と、実行時にサイズが変更できる動的配列の 2 種類の配列があります。動的配列については、この章の後半の「動的配列」で詳しく説明します。
固定サイズの配列を宣言する
固定サイズの配列を宣言するには 3 つの方法があり、どの方法を使用するかは、配列に必要な有効範囲によって異なります。
パブリック配列を作成するには、モジュールの宣言セクションで Public ステートメントを使用して配列を宣言します。
モジュール レベルの配列を作成するには、モジュールの宣言セクションで PRivate ステートメントを使用して配列を宣言します。
ローカル配列を作成し、プロセス内で Private ステートメントを使用して配列を宣言します。
上限と下限を設定する
配列を宣言する場合、配列名の後にかっこで囲まれた上限が続きます。上限は Long データ型の範囲 (-2,147,483,648 ~ 2,147,483,647) を超えてはなりません。たとえば、次の配列宣言はモジュールの宣言セクションに表示される場合があります。
DimCounters(14)AsInteger '15 要素。
DimSums(20)AsDouble '21 要素。
パブリック配列を作成するには、Dim を Public に直接置き換えます。
PublicCounters(14)AsInteger
PublicSums(20)AsDouble
同じ宣言では、プロシージャ内で Dim を使用します。 DimCounters(14)AsIntegerDimSums(20)AsDouble 最初の宣言では、0 から 14 までのインデックスが付いた 15 個の要素を含む配列を作成します。 2 番目の宣言は、0 から 20 までのインデックスが付いた 21 個の要素を含む配列を作成します。デフォルトの下限は 0 です。
下限を指定するには、キーワード To を使用して明示的に下限を指定します (Long データ型の場合)。
DimCounters(1To15)AsInteger
DimSums(100To120)AsString
前のステートメントでは、Counters のインデックス値は 1 ~ 15 の範囲であり、Sum のインデックス値は 100 ~ 120 の範囲です。
他の配列を含む配列
バリアント データ型の配列を作成し、異なるデータ型の配列と同じ場所に配置することができます。次のコードは 2 つの配列を作成します。1 つは整数を含み、もう 1 つは文字列を含みます。次に、3 番目のバリアント配列を宣言し、その中に整数配列と文字列配列を配置します。
PrivateSubCommand1_Click()
DimintXAsInteger 'カウンター変数を宣言します。
' 整数の配列を宣言して配置します。
DimcountersA(5)AsInteger
ForintX=0To4
カウンタA(intX)=5
NextintX
'文字列の配列を宣言して配置します。
DimcountersB(5)AsString
ForintX=0To4
カウンターB(intX)=こんにちは
NextintX
DimarrX(2)AsVariant ' 2 つのメンバーを持つ新しい配列を宣言します。
arrX(1)=countersA() '他の配列を配列に移動します。
arrX(2)=カウンターB()
MsgBoxarrX(1)(2) '配列の各メンバーを表示します。
MsgBoxarrX(2)(3)
EndSub
多次元配列
場合によっては、配列内の関連情報を追跡することが必要になることがあります。たとえば、コンピュータ画面上のすべてのピクセルを追跡するには、その X 座標と Y 座標を参照する必要があります。現時点では、値を格納するために多次元配列を使用する必要があります。多次元配列は Visual Basic で宣言できます。たとえば、次のステートメントは、プロシージャ内で 10×10 の 2 次元配列を宣言します。
StaticMatrixA(9,9)AsDouble
明示的な下限を使用して、いずれかまたは両方の次元を宣言できます。
StaticMatrixA(1To10,1To10)AsDouble
これらはすべて、2 次元を超える配列に一般化できます。例えば:
DimMultiD(3,1To10,1To15)
この宣言により、サイズ 4×10×15 の 3 次元配列が作成されます。要素の総数は 3 次元の積で 600 です。
配列の次元を増やすと、配列が占有する記憶領域が大幅に増加するため、多次元配列は注意して使用する必要があることに注意してください。バリアント配列はより大きな記憶領域を必要とするため、使用する場合は特に注意してください。
ループを使用して配列を操作する
ネストされた For ループを使用すると、多次元配列を効果的に処理できます。たとえば、MatrixA では、各要素には配列内の位置に基づいて値が割り当てられます。
DimIAsInteger,JAsInteger
StaticMatrixA(1To10,1To10)AsDouble
ForI=1To10
ForJ=1To10
行列 A(I,J)=I*10 J
NextJ
次へ私
詳細ループの詳細については、この章で後述する「ループ構造」セクションを参照してください。
動的配列
配列の大きさがどれくらいであるべきかが不明な場合があります。したがって、実行時に配列のサイズを変更できるようにしたいと考えています。
動的配列のサイズはいつでも変更できます。 Visual Basic では、動的配列が最も柔軟で便利であり、メモリを効果的に管理するのに役立ちます。たとえば、大規模な配列を短時間使用し、その配列が使用されていないときにメモリ空間をシステムに解放することができます。
動的配列を使用しない場合は、できるだけ大きなサイズの配列を宣言し、不要な要素を削除してください。ただし、この方法を過度に使用すると、メモリの動作環境が遅くなります。
動的配列を作成するには、次の手順に従います。
1. (配列をパブリック配列にしたい場合は) Public ステートメントで配列を宣言するか、(配列をモジュール レベルにしたい場合は) モジュール レベルで Dim ステートメントで配列を宣言します。 、または (配列をローカル配列にしたい場合は) in プロシージャ中に Static または Dim ステートメントを使用して配列を宣言します。空のディメンション テーブルを配列に追加して、配列を動的として宣言します。
DimDynArray()
2. ReDim ステートメントを使用して、実際の要素数を割り当てます。
ReDimDynArray(X 1)
ReDim ステートメントはプロシージャ内でのみ使用できます。 Dim ステートメントや Static ステートメントとは異なり、ReDim ステートメントは実行可能なステートメントであるため、アプリケーションは実行時に操作を実行します。 ReDim ステートメントは、固定配列で使用される構文と同じ構文をサポートします。次元ごとに、各 ReDim ステートメントで要素の数と上限と下限を変更できます。ただし、配列の次元は変更できません。
ReDimDynArray(4to12)
たとえば、初めてモジュール レベルで作成された動的配列 Matrix1 を使用します。
DimMatrix1()AsInteger
次に、次の手順で配列にスペースを割り当てます。
SubCalcValuesNow()
。
。
。
ReDimMatrix1(19,29)
EndSub
ここの ReDim ステートメントは、20×30 の整数行列を Matrix に割り当てます (要素の合計サイズは 600)。変数を使用して動的配列の境界を設定する別の方法もあります。
ReDimMatrix1(X,Y)
文字列を可変サイズのバイト配列に割り当てることができることに注意してください。バイト配列を可変長文字列に割り当てることもできます。文字列のバイト数はプラットフォームによって異なることに注意することが重要です。 Unicode プラットフォームでは、同じ文字列のバイト数が非 Unicode プラットフォームの 2 倍になります。
動的配列の内容を保持する
ReDim ステートメントが実行されるたびに、現在配列に格納されているすべての値が失われます。 Visual Basic は、配列要素の値を空 (バリアント配列の場合)、0 (数値配列の場合)、長さ 0 の文字列 (文字列配列の場合)、または Nothing (オブジェクトの配列の場合) にリセットします。 。
これは、新しいデータ用に配列を準備する場合、またはメモリを節約するために配列サイズを削減する場合に便利です。配列内のデータを失わずに配列のサイズを変更したい場合があります。これは、Preserve キーワードを指定した ReDim ステートメントを使用して実行できます。たとえば、UBound 関数を使用して上限を参照すると、配列が拡張され、既存の要素の値を失うことなく要素が追加されます。
ReDimPreserveDynArray(UBound(DynArray) 1)
Preserve キーワードを使用する場合、多次元配列の最後の次元の上限のみを変更できます。他の次元または最後の次元の下限を変更すると、実行時にエラーが発生します。したがって、次のようにプログラムできます。
ReDimPreserveMatrix(10,UBound(行列,2) 1)
次のようにプログラミングする代わりに:
ReDimPreserveMatrix(UBound(Matrix,1) 1,10)
動的配列の詳細については、言語リファレンスの「ReDim 関数」を参照してください。オブジェクト配列の詳細は、第 9 章「オブジェクトを使用したプログラミング」を参照してください。
->