更新日:、 作成日:

VBA UBound 関数:配列の最大インデックスを取得する

はじめに

Excel VBA マクロの UBound 関数から配列の最大インデックスを取得する方法を紹介します。

UBound 関数は、配列の最大インデックスを返します。

(0 To 2) の配列なら 2 を返します。

配列の要素数も取得できます。

配列をループしたいときに使用します。

配列の最小インデックスを取得するには「LBound 関数」を使用します。
配列について詳しくは「配列」をご覧ください。

UBound 関数の引数と戻り値

UBound(配列)
配列の最大のインデックスを取得します。

UBound(配列, 次元)
指定した次元の最大のインデックスを取得します。

引数「配列」配列を指定します。
引数「次元」省略できます。引数「配列」の次元を指定します。
戻り値の型数値型 (Long)

解説

引数「配列」のインデックスが 0 To 1 の配列なら 1 を返します。 0 To 2 の配列なら 2 を返します。

引数「次元」を省略すると、一次元目の配列の最大インデックスを返します。これは 1 を指定したのと同じです。

引数「次元」に 2 を指定すると、二次元目の配列の最大インデックスを返します。(0 To 2, 1 To 3) の配列なら 3 を返します。

存在しない次元を指定すると「エラー 9 インデックスが有効範囲にありません。」が発生します。

最小インデックスを取得するには「LBound 関数」を使用します。

要素数

UBound(配列) - LBound(配列) + 1 のように入力して、配列の長さ (要素数) を取得できます。

使用例

UBound 関数の使用例を紹介します。

配列の最大インデックスを取得する

配列の最大インデックスを取得します。

Dim i As Integer

Dim la(2) As Integer ' 0 to 2
Debug.Print(LBound(la)) ' 0、最小インデックス
Debug.Print(UBound(la)) ' 2、最大インデックス

Dim lb(2 To 3) As Integer
Debug.Print(LBound(lb)) ' 2、最小インデックス
Debug.Print(UBound(lb)) ' 3、最大インデックス

Dim lc(0 to 2, 1 To 3) As Integer
Debug.Print(LBound(lc, 1)) ' 0、最小インデックス
Debug.Print(UBound(lc, 1)) ' 2、最大インデックス
Debug.Print(LBound(lc, 2)) ' 1、最小インデックス
Debug.Print(UBound(lc, 2)) ' 3、最大インデックス

配列をループする

UBound 関数と「LBound 関数」を使用して、配列の全要素をループできます。

Dim i As Integer
Dim 配列(3) As Integer
For i = LBound(配列) To UBound(配列)
    配列(i) = i
Next

要素数を取得する

UBound 関数と「LBound 関数」を使用して、配列の要素数を取得できます。

Dim 配列(2) As Integer
Dim i As Integer
i = UBound(配列) - LBound(配列) + 1 ' 要素数を取得する
Debug.Print(i) ' 3