Visual Basic for Application の配列

Visual Basic for Application の配列は、通常、同じ型の関連する変数のセットを格納する構造です。 配列エントリは、数値インデックスによってアクセスされます。

たとえば、後で VBA コードで使用するために名前を保存する必要がある 20 人のチームがあります。 次のように、それぞれの名前を保持するために 20 個の変数を宣言するだけです。

Dim Team_Member1 を文字列として Dim Team_Member2 を文字列として ... Dim Team_Member20 を文字列として

しかし、もっとシンプルで整理された方法を使用できます。チーム メンバーの名前のリストを、次のように 20 個の変数の配列に格納します。 文字列:

Dim Team_Members(1 から 20) を文字列として

上記の行では、配列を宣言しています。 次のように、各要素に値を書き込みましょう。

Team_Members(1) = "ジョン・スミス"

個別の変数を使用する場合と比較して、データを配列に格納することの利点は、配列の各要素に対して同じアクションを実行する必要がある場合に明らかになります。 チーム メンバーの名前が 20 の個別の変数に格納されている場合、各メンバーに対して同じアクションを実行するには、毎回 20 行のコードを記述する必要があります。 ただし、名前が配列に格納されている場合は、単純なループを使用して、それぞれに対して目的のアクションを実行できます。

各チーム メンバーの名前を列セルに順番に出力するコード例を使用して、そのしくみを以下に示します。 A アクティブな Excel ワークシート。

For i = 1 To 20 Cells(i,1).Value = Team_Members(i) 次の i

明らかに、20 個の名前を格納する配列を操作する方が、20 個の個別の変数を使用するよりもはるかに煩わしくなく、より正確です。 しかし、これらの名前が 20 ではなく 1000 である場合はどうなるでしょうか。 さらに、姓と父称を別々に保持する必要がある場合は?! 配列の助けを借りずに VBA コードでこのような量のデータを処理することは、間もなく完全に不可能になることは明らかです。

Excel Visual Basic の多次元配列

上記の Visual Basic 配列は、XNUMX 次元と見なされます。 これは、名前の単純なリストを保存することを意味します。 ただし、配列は複数の次元を持つことができます。 たとえば、XNUMX 次元配列は値のグリッドと比較できます。

5 つの異なるチームの 5 月の毎日の売上高を保存するとします。 これには、31 日間の XNUMX セットのメトリックで構成される XNUMX 次元配列が必要です。 次のように配列を宣言しましょう。

Dim Jan_Sales_Figures(1 から 31、1 から 5) を通貨として

配列要素にアクセスするには XNUMX月の売上高の場合、日とコマンド番号を示す XNUMX つのインデックスを使用する必要があります。 たとえば、売上高を含む要素のアドレス 2オー のためのチーム 15番目 XNUMX 月は次のように記述されます。

15 月の売上高(2, XNUMX)

同様に、3 次元以上の配列を宣言できます。配列宣言に次元を追加し、追加のインデックスを使用してこの配列の要素を参照するだけです。

Excel Visual Basic での配列の宣言

この記事の前半で、VBA で配列を宣言する例をいくつか見てきましたが、このトピックは詳しく見てみる価値があります。 示されているように、XNUMX 次元配列は次のように宣言できます。

Dim Team_Members(1 から 20) を文字列として

このような宣言は、配列が チームメンバー 20 から 1 までのインデックスでアクセスできる 20 個の変数で構成されます。ただし、配列変数に 0 から 19 までの番号を付けると考えるかもしれません。その場合、配列は次のように宣言する必要があります。

Dim Team_Members(0 から 19) を文字列として

実際、デフォルトでは、配列要素の番号付けは 0 から始まり、配列宣言では、次のように最初のインデックスがまったく指定されていない場合があります。

文字列として薄暗い Team_Members(19)

VBA コンパイラは、このようなエントリを、20 から 0 までのインデックスを持つ 19 個の要素の配列を宣言するものとして扱います。

多次元の Visual Basic 配列を宣言する場合も、同じ規則が適用されます。 例の XNUMX つで既に示したように、XNUMX 次元配列を宣言する場合、その次元のインデックスはコンマで区切られます。

Dim Jan_Sales_Figures(1 から 31、1 から 5) を通貨として

ただし、配列の両方の次元の開始インデックスを指定せず、次のように宣言した場合:

Dim Jan_Sales_Figures(31, 5) 通貨として

このエントリは 32 次元配列として扱われ、その最初の次元には 0 から 31 までのインデックスを持つ 6 個の要素が含まれ、配列の 0 番目の次元には 5 から XNUMX までのインデックスを持つ XNUMX 個の要素が含まれます。

動的配列

上記の例のすべての配列には、固定数の次元があります。 ただし、多くの場合、配列のサイズを事前に知ることはできません。 巨大な配列を宣言することで、この状況から抜け出すことができます。そのサイズは、タスクに必要なサイズよりも確実に大きくなります。 しかし、このような解決策は大量の追加メモリを必要とし、プログラムの速度を低下させる可能性があります。 より良い解決策があります。 動的配列を使用できます。これは、マクロの実行中に何度でもサイズを設定および変更できる配列です。

動的配列は、次のように空の括弧で宣言されます。

文字列として薄暗い Team_Members()

次に、式を使用してコード実行中に配列の次元を宣言する必要があります。 再寸法:

ReDim Team_Members(1 から 20)

コードの実行中に配列のサイズを再度変更する必要がある場合は、ReDim 式を再度使用できます。

If Team_Size > 20 Then ReDim Team_Members(1 から Team_Size) End If

この方法で動的配列のサイズを変更すると、配列に格納されているすべての値が失われることに注意してください。 すでに配列にデータを格納するには、キーワードを使用する必要があります 保存する以下のように:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 から Team_Size) End If

残念ながらキーワード 保存する 配列次元の上限を変更するためにのみ使用できます。 この方法で配列の下限を変更することはできません。 また、配列に複数の次元がある場合は、キーワードを使用して 保存する、配列の最後の次元のみサイズを変更できます。

コメントを残す