UBound、LBound
UBound関数は配列の要素番号の最大値を取得し、LBound関数は最小値を取得できます。このとき取得する値は要素番号であり、要素数とは異なります。
上の絵は最小番号は0、最大番号は2、要素数は3で、要素番号と要素数が異なることが分かります。
デフォルトの状態であれば最小値は0固定のためUBound関数だけで要素数が取得できますが、Option Baseで最小値を変更されている場合や、Toキーワードで最小値と最大値を指定している場合は最小値が0とは限らないため、その場合はUBound関数とLBound関数の両方の差から要素数を求めます。
UBound関数とLBound関数は一次元配列だけでなく二次元配列などの多次元配列の各次元の要素数も取得可能です。
構文
1 2 |
UBound(arrayname[, dimension]) As Long LBound(arrayname[, dimension]) As Long |
arrayname | 配列変数名を指定します。通常は付けませんが、配列変数名に中括弧の()を付けていても動作します。 |
dimension | 省略可能です。省略時の既定値は1(1次元目)です。取得する要素数が配列の何次元目なのかを指定します。多次元配列の場合で1次元目(一番左の要素)の要素数を知りたい場合は0ではなく1を指定します。 |
戻り値 | 配列の要素数を内部処理形式LongのVariantの値を返します。dimensionが指定されている場合はその次元の要素数を返します。 |
一次元配列の要素数を取得するには
一次元配列の要素数は以下のように取得します。
1 |
UBound(一次元配列) - LBound(一次元配列) + 1 |
先にも書きましたが、Option BaseやToキーワードを使っていないのであれば、以下のようにUBound関数だけでも構いません。
1 |
UBound(一次元配列) + 1 |
二次元配列の要素数を取得するには
二次元配列を含めた多次元配列の場合はUBound関数とLBound関数の第二引数の次元数を指定します。
以下は二次元配列の2番目の次元(ar(1, 2)であれば2の部分)の要素数を取得する式です。
1 |
UBound(多次元配列, 2) - LBound(多次元配列, 2) + 1 |
一次元配列と同様にLBound関数を使う必要がなければUBound関数だけで構いません。
1 |
UBound(多次元配列, 2) + 1 |
サンプルコード
一次元配列と二次元配列の各次元の要素数を取得するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub UBoundLBoundTest() Dim ar1(5) Dim ar1To(1 To 5) Dim ar2(2, 4) Dim ar2To(1 To 2, 0 To 4) Debug.Print "Toキーワードなしの一次元配列の要素数:" & UBound(ar1) + 1 Debug.Print "Toキーワードありの一次元配列の要素数:" & UBound(ar1To) - LBound(ar1To) + 1 Debug.Print "Toキーワードなしの二次元配列の1次元目の要素数:" & UBound(ar2, 1) + 1 Debug.Print "Toキーワードありの二次元配列の1次元目の要素数:" & UBound(ar2To, 1) - LBound(ar2To, 1) + 1 Debug.Print "Toキーワードなしの二次元配列の2次元目の要素数:" & UBound(ar2, 2) + 1 Debug.Print "Toキーワードありの二次元配列の2次元目の要素数:" & UBound(ar2To, 2) - LBound(ar2To, 2) + 1 End Sub |
実行結果
1 2 3 4 5 6 |
Toキーワードなしの一次元配列の要素数:6 Toキーワードありの一次元配列の要素数:5 Toキーワードなしの二次元配列の1次元目の要素数:3 Toキーワードありの二次元配列の1次元目の要素数:2 Toキーワードなしの二次元配列の2次元目の要素数:5 Toキーワードありの二次元配列の2次元目の要素数:5 |