VBAで配列を扱うときに欠かせないのが、VBA UBound関数とLBound関数です。これらは、配列の上限(最後のインデックス)と下限(最初のインデックス)を取得するための関数で、配列 要素数を求めたり、For ループで効率的に処理する際に非常に便利です。この記事では、VBA UBoundとLBoundの基本構文から、実践的な使用例、ループ処理での活用方法までをわかりやすく解説します。
VBAのUBound・LBound関数とは?配列の基礎から理解しよう
VBAで配列を扱うときの基本
VBAでは、複数のデータをまとめて管理するために配列(Array)を使用します。たとえば、5人分の点数を扱う場合、score(0)~score(4)といった形で複数の値を1つの変数に格納できます。
UBoundとLBoundの違い
- UBound(array):配列の上限インデックス(最後の要素位置)を返す
- LBound(array):配列の下限インデックス(最初の要素位置)を返す
これらを組み合わせることで、配列の範囲や要素数を柔軟に扱うことができます。
どんな場面で使うのか
- 配列の長さを自動取得したいとき
- For ループで全要素を繰り返し処理したいとき
- Split関数で作った配列の長さを確認したいとき
UBound関数の基本構文と使い方
UBoundの基本構文は以下の通りです。
UBound(array[, dimension])
引数の説明:
array:対象となる配列dimension:多次元配列のとき、どの次元の上限を取得するかを指定(省略可)
1次元配列での使用例
Sub ExampleUBound()
Dim arr(3) As Integer
Debug.Print UBound(arr)
End Sub
このコードでは、配列arrの上限は3なので「3」と出力されます。
2次元配列での使用例
Sub ExampleUBound2D()
Dim data(1 To 3, 1 To 4) As Integer
Debug.Print UBound(data, 1) ' → 3(1次元の上限)
Debug.Print UBound(data, 2) ' → 4(2次元の上限)
End Sub
VBA UBoundは、次元を指定することで多次元配列の任意の範囲を取得できます。VBA UBound関数の応用テクニックでは、さらに詳細な使い方を紹介しています。
LBound関数の基本構文と使い方
LBoundの基本構文は以下の通りです。
LBound(array[, dimension])
1次元配列での使用例
Sub ExampleLBound()
Dim arr(1 To 5) As Integer
Debug.Print LBound(arr)
End Sub
この場合、配列の下限は1として定義されているため、1と出力されます。
多次元配列での指定方法
Sub ExampleLBound2D()
Dim data(0 To 2, 5 To 9) As Integer
Debug.Print LBound(data, 1) ' → 0
Debug.Print LBound(data, 2) ' → 5
End Sub
UBoundとLBoundで配列の要素数を求める方法
要素数を求める基本式:
要素数 = UBound(array) - LBound(array) + 1
Sub ExampleArrayCount()
Dim arr(1 To 5) As String
Dim count As Long
count = UBound(arr) - LBound(arr) + 1
Debug.Print count ' → 5
End Sub
Split関数で作った配列の要素数を求める例
Sub ExampleSplitCount()
Dim arr As Variant
arr = Split("A,B,C,D", ",")
Debug.Print UBound(arr) - LBound(arr) + 1 ' → 4
End Sub
Split関数との組み合わせについては、VBA入門:UBound・LBound関数で配列の要素数を取得する方法でも詳しく説明されています。
UBound・LBoundを使って配列をループ処理する
UBoundとLBoundを活用すると、配列のサイズを意識せずにForループで効率的に処理できます。
Sub ExampleForLoop()
Dim arr As Variant
arr = Array("A", "B", "C", "D")
Dim i As Long
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
多次元配列のループ処理例
Sub Example2DLoop()
Dim data(1 To 2, 1 To 3) As String
Dim i As Long, j As Long
For i = LBound(data, 1) To UBound(data, 1)
For j = LBound(data, 2) To UBound(data, 2)
Debug.Print "Cell(" & i & "," & j & ")"
Next j
Next i
End Sub
UBound・LBoundを使うときの注意点と実践テクニック
空の配列を扱う際のエラー対策
空配列でVBA UBoundを実行するとエラーになります。安全に扱うには、IsArray()やNot IsEmpty()を併用します。
If IsArray(arr) Then
If Not IsEmpty(arr) Then
Debug.Print UBound(arr)
End If
End If
LBoundが0か1かを意識したコーディング
VBAでは、Option Base 1を指定しない限り、デフォルトの下限値は「0」です。常にLBoundを使うことで、コードの再利用性が向上します。
ReDim Preserveとの組み合わせ
動的配列を拡張するときには、ReDim Preserveを使って既存データを保持します。このときもVBA UBoundを活用して次のインデックスを指定します。
ReDim Preserve arr(1 To UBound(arr) + 1)
まとめ|UBoundとLBoundで配列操作をスマートに
- UBound:配列の上限を取得
- LBound:配列の下限を取得
- UBound – LBound + 1 で要素数を求めることが可能
- For ループで使えば、動的配列にも柔軟に対応
VBA UBoundとLBoundを理解することで、配列の操作がより柔軟かつ安全になります。配列を使ったデータ処理の効率化を目指すなら、ぜひこの2つの関数を使いこなしましょう。


