概要

UBound関数は、Excel VBAで配列の指定した次元の最大インデックスを取得するための関数です。配列のサイズを確認したり、ループ処理を行う際に配列の範囲を知るために役立ちます。UBoundLBound関数と組み合わせて使用することが多く、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

この例では、LBoundUBoundを組み合わせて、二次元配列の全ての要素を処理しています。

まとめ

UBound関数は、配列の範囲を確認するための非常に便利なツールです。特に配列のサイズが動的に変わる場合や、多次元配列を扱う場合にその効果を発揮します。LBound関数と併用することで、配列の最小・最大インデックスを容易に取得し、安全で効率的な配列操作を行えます。