Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 配列の要素数を取得する

配列の要素数を取得する

対象:Excel2007, Excel2010, Excel2013

「excel vba 配列 要素数」
「excel2010 vba 配列の要素数を取得」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

配列の要素数を取得するVBAのコードを探している方による検索です。

[スポンサードリンク]

配列の要素数を取得するサンプルマクロ

参考になりそうな簡単なマクロをご紹介しておきます。

Sub 配列の要素数を取得する()

 Dim arr(1 To 5) As String

 MsgBox UBound(arr)
 MsgBox LBound(arr)
 MsgBox UBound(arr) - LBound(arr) + 1

End Sub

上記のマクロを実行すると
  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の使い方 » 配列 » 配列の要素数を取得する

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.