この記事ではLBound関数とUBound関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
LBound関数とUBound関数の使い方と注意点
LBound関数とUBound関数とは?
- LBound関数 : 配列の**下限(最小インデックス)**を取得する関数
- UBound関数 : 配列の**上限(最大インデックス)**を取得する関数
この2つの関数はセットで使うことが多く、配列のサイズや範囲を動的に扱いたい場合に必須です。
構文
LBound(配列名 [, 次元番号])
UBound(配列名 [, 次元番号])
- 配列名 : 対象の配列
- 次元番号(省略可) : 多次元配列の場合は次元を指定(省略時は1次元目)
- 戻り値 : 指定した配列の下限または上限のインデックス番号(整数)
使用例
一次元配列の上限・下限を取得する
Sub Sample()
Dim MyArray As Variant
MyArray = Array("A", "B", "C")
Debug.Print "下限 : " & LBound(MyArray)
Debug.Print "上限 : " & UBound(MyArray)
End Sub
▶ 出力結果
下限 : 0
上限 : 2
多次元配列の上限・下限を取得する
Sub Sample()
Dim MyArray(1 To 3, 5 To 10) As Integer
Debug.Print "1次元目下限 : " & LBound(MyArray, 1)
Debug.Print "1次元目上限 : " & UBound(MyArray, 1)
Debug.Print "2次元目下限 : " & LBound(MyArray, 2)
Debug.Print "2次元目上限 : " & UBound(MyArray, 2)
End Sub
▶ 出力結果
1次元目下限 : 1
1次元目上限 : 3
2次元目下限 : 5
2次元目上限 : 10
配列の全要素をループ処理する例
Sub Sample()
Dim MyArray() As Variant
MyArray = Array("A", "B", "C")
Dim i As Long
For i = LBound(MyArray) To UBound(MyArray)
Debug.Print MyArray(i)
Next i
End Sub
▶ 出力結果
A
B
C
⚠️注意
配列が未初期化の状態で使うと実行時エラー
未初期化の配列に対してLBoundやUBoundを呼び出すと、配列の範囲が存在しないため、実行時エラーが発生します。
Sub Sample()
Dim MyArray() As Integer
' MyArrayはまだサイズ指定なし(未初期化)
Debug.Print LBound(MyArray) ' 実行時エラーが発生
End Sub
配列でない変数に使用するとコンパイルエラー
LBoundやUBoundは配列専用の関数のため、配列でない変数に使用するとコンパイルエラーになります。
Sub Sample()
Dim Myint As Integer
Myint = 5
Debug.Print UBound(Myint) ' コンパイルエラーが発生
End Sub
多次元配列の場合は、必ず正しい次元を指定
存在しない次元番号を指定すると実行時エラーが発生します。
Sub Sample()
Dim MyArray(1 To 2, 3 To 4) As Integer
Debug.Print LBound(MyArray, 3) ' 次元指定が存在しないため実行時エラーが発生
End Sub
関連するVBA関数
- Array関数
- Split関数
- Join関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方