「エクセル vba 配列 次元指定 要素数」
「excel vba 配列の各次元の要素数を取得する」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
Excel VBA(Visual Basic for Applications)で、多次元の配列を使うときに、次元ごとの要素数を取得するにはどうすればいいのかを探している方による検索です。
二次元配列の次元ごとの添字の最大値を取得するサンプルマクロ
まずは二次元配列で、各次元の添え字・インデックスの最大値を取得するコードを確認しましょう。
以下のマクロを実行すると、メッセージボックスに「5」「10」と順番に表示されます。
Dim arr(5, 10) As String
MsgBox UBound(arr, 1)
MsgBox UBound(arr, 2)
UBound関数を使うと、配列の添え字・インデックスの最大値を取得できます。
一次元配列の場合は、
UBound(arr)
といった形で使われるのが一般的ですが、実はUBound関数には引数を2つ指定することができます。
UBound関数の第2引数には、最大値を調べたい配列の次元を表す整数を指定します。
一次元配列の場合の、
UBound(arr)
というコードは、
UBound(arr, 1)
の第2引数が省略されていただけなのです。
上記のマクロの場合、
UBound(arr, 1)
で、二次元配列・arrの、1番目の次元の添え字の最大値が取得でき、
UBound(arr, 2)
で、二次元配列・arrの、2番目の次元の添え字の最大値が取得できます。
このマクロでは、
Dim arr(5, 10) As String
と宣言された配列でしたから、「5」「10」が順番にメッセージボックスに表示されたというわけです。
二次元配列の次元ごとの添字の最小値を取得するサンプルマクロ
次は、次元ごとの、添え字・インデックスの最小値の確認です。
Dim arr(0 To 5, 0 To 10) As String
MsgBox LBound(arr, 1)
MsgBox LBound(arr, 2)
配列の添え字の最小値を変えすLBound関数も、先のUBound関数と同じで、第2引数に次元を表す整数を指定します。
上記のマクロを実行して「0」が2回メッセージボックスに表示されたのを確認したら、
Dim arr(0 To 5, 0 To 10) As String
を、
Dim arr(1 To 5, 1 To 10) As String
に変更してから実行して、「1」が2回メッセージボックスに表示されることをご確認ください。
二次元配列の次元ごとの要素数を取得するサンプルマクロ
結局、以下のようなコードで、二次元配列の次元ごとの要素数を取得することができます。
Dim arr(1 To 5, 1 To 10) As String
MsgBox UBound(arr, 1) - LBound(arr, 1) + 1
MsgBox UBound(arr, 2) - LBound(arr, 2) + 1
一次元配列の要素数は、「添字の最大値-添字の最小値+1」すなわち、
UBound(配列) - LBound(配列) + 1
で取得できることをご紹介しています。
このUBound関数・LBound関数に次元数も指定して
UBound(配列, 次元) - LBound(配列, 次元) + 1
としてやれば、二次元配列など多次元配列の場合に、次元ごとの要素数を取得できます。
- Newer:PowerPoint VBAでParagraphFormat2オブジェクトを取得するには
- Older:PowerPointのParagraphFormatとParagraphFormat2のプロパティ比較一覧
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 二次元配列の次元ごとの要素数を取得する