概要
UBound
関数は、Excel VBAで配列の指定した次元の最大インデックスを取得するための関数です。配列のサイズを確認したり、ループ処理を行う際に配列の範囲を知るために役立ちます。UBound
はLBound
関数と組み合わせて使用することが多く、LBound
は配列の最小インデックスを取得します。
構文
UBound(配列, [次元])
パラメータ
-
配列
最大インデックスを取得したい対象の配列を指定します。
-
次元(省略可能)
配列の次元を指定します。1次元配列の場合、この引数は省略可能です。2次元以上の配列では、次元番号を指定することでその次元の最大インデックスを取得します。1を指定すると第1次元、2を指定すると第2次元になります。
戻り値
指定した次元における最大インデックス(整数)を返します。
使用例
一次元配列の最大インデックスを取得
Sub ExampleUBound1D()
Dim arr() As Integer
ReDim arr(0 To 10) ' 配列の範囲を0から10に設定
MsgBox UBound(arr) ' 結果: 10
End Sub
この例では、UBound
関数は配列arr
の最大インデックスである10
を返します。
二次元配列の各次元の最大インデックスを取得
Sub ExampleUBound2D()
Dim arr(1 To 5, 1 To 3) As String
MsgBox "第1次元の最大インデックス: " & UBound(arr, 1) ' 結果: 5
MsgBox "第2次元の最大インデックス: " & UBound(arr, 2) ' 結果: 3
End Sub
この例では、2次元配列の第1次元と第2次元の最大インデックスをそれぞれ取得しています。
動的配列の使用例
Sub ExampleDynamicArray()
Dim arr() As Variant
ReDim arr(1 To 4, 1 To 2)
MsgBox "第1次元の最大インデックス: " & UBound(arr, 1) ' 結果: 4
MsgBox "第2次元の最大インデックス: " & UBound(arr, 2) ' 結果: 2
End Sub
動的にサイズを変更できる配列に対しても、UBound
関数で正確に最大インデックスを取得できます。
使用場面と注意点
-
ループ処理
配列をループで処理する際に、
UBound
関数を使用して配列の範囲を決定します。これにより、配列の範囲外にアクセスするエラーを防ぐことができます。 -
エラーハンドリング
配列が初期化されていない状態で
UBound
関数を呼び出すとエラーが発生するため、IsArray
関数などを使って配列かどうかの確認を行うことが推奨されます。 -
次元の指定
配列が多次元の場合、
次元
パラメータを指定しないと意図したインデックスを取得できません。必ず必要な次元を正確に指定してください。
応用例 - 配列を全て処理する
Sub ProcessArray()
Dim arr(1 To 3, 1 To 4) As Integer
Dim i As Integer, j As Integer
For i = LBound(arr, 1) To UBound(arr, 1)
For j = LBound(arr, 2) To UBound(arr, 2)
arr(i, j) = i * j
Next j
Next i
MsgBox "処理完了"
End Sub
この例では、LBound
とUBound
を組み合わせて、二次元配列の全ての要素を処理しています。
まとめ
UBound
関数は、配列の範囲を確認するための非常に便利なツールです。特に配列のサイズが動的に変わる場合や、多次元配列を扱う場合にその効果を発揮します。LBound
関数と併用することで、配列の最小・最大インデックスを容易に取得し、安全で効率的な配列操作を行えます。