「excel vba 配列 要素数」
「excel2010 vba 配列の要素数を取得」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
配列の要素数を取得するVBAのコードを探している方による検索です。
配列の要素数を取得するサンプルマクロ
参考になりそうな簡単なマクロをご紹介しておきます。
Dim arr(1 To 5) As String
MsgBox UBound(arr)
MsgBox LBound(arr)
MsgBox UBound(arr) - LBound(arr) + 1
上記のマクロを実行すると
5
1
5
という値がメッセージボックスに順番に表示されるはずです。
最後の「5」が配列の要素数です。
最後のMsgBox関数の引数に指定されている
UBound(arr) - LBound(arr) + 1
すなわち、
UBound(配列) - LBound(配列) + 1
で、配列の要素数を取得できます。
添字・インデックスの最小値が1の場合
UBound関数は配列の添え字・インデックスの最大値
LBound関数は配列の添え字・インデックスの最小値
を、それぞれ返す関数です。
上記のマクロでは、
Dim arr(1 To 5) As String
と宣言されているので、
UBound関数の返す「5」
LBound関数の返す「1」
「UBound(arr) - LBound(arr) + 1」すなわち「5 - 1 + 1」の結果「5」
が順番に表示されたわけです。
Dim arr(1 To 5) As String
と宣言されている上記のマクロのように、添え字の最小値が「1」であれば、UBound関数の戻り値が、そのまま要素数に一致します。
添字・インデックスの最小値が0の場合
次に
Dim arr(1 To 5) As String
を
Dim arr(0 To 5) As String
に変更してからマクロを実行してみてください。
今度は
5
0
6
というメッセージボックスが表示されるはずです。
先ほどとは違って、UBound関数の返す添え字の最大値は、要素数に一致しません。
添え字・インデックスの最大値だけでは、配列の要素数はわかりません。最小値のほうも考慮に入れる必要があります。
添え字の最小値がいくつであっても、要素数を計算するのが、上記のマクロ
MsgBox UBound(arr) - LBound(arr) + 1
で使っている
UBound(配列) - LBound(配列) + 1
という式です。
配列の添え字の最小値は「0」か「1」のことがほとんどのはずですが、参考までに
Dim arr(2 To 5) As String
の結果なども、ご確認いただくと、
UBound(配列) - LBound(配列) + 1
の意味を、より納得できるでしょう。
Split関数の場合
ちなみに、Split関数で返される配列の要素数はUBound関数で返される値に「+1」した値である、ということを記事にしています。
結局これは、Split関数が返す配列の添え字・インデックスの最小値が必ず「0」だからです。
Split関数の場合、
UBound(配列) - LBound(配列) + 1
は必ず、
UBound(配列) - 0 + 1
ですから、Split関数で返される配列の要素数はUBound関数で返される値に「+1」した値といえるわけです。
あくまでも配列全般で要素数を取得するには
UBound(配列) - LBound(配列) + 1
という計算が必要です。
最終更新日時:2018-11-13 10:08
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 配列の要素数を取得する