はじめに
VBAで配列を扱っていると、
「この配列はいくつの要素を持っているんだろう?」
「ループするときに上限を知りたい」
そんな場面がよくあります。
そこで役立つのが UBound 関数 です。
ここでは、UBound の基本の使い方と、
実務で役立つ書き方を解説します。
まずはコードを確認
Dim arr As Variant
arr = Array("A", "B", "C")
MsgBox UBound(arr)
結果は 2。
配列の「最大インデックス」を返します。
UBound の基本
配列の上限(最大インデックス)を取得する
UBound(配列)
配列は 0 から始まる ため、
要素数とは少し違う点に注意が必要です。
要素数を取得する方法
要素数 = UBound + 1
Dim count As Long
count = UBound(arr) + 1
配列の要素数を知りたいときは、
UBound + 1 が基本です。
具体的な例で理解する
Split と組み合わせて要素数を調べる
Dim arr As Variant
arr = Split("A,B,C,D", ",")
MsgBox "要素数:" & UBound(arr) + 1
CSVのような文字列を扱うときに便利です。
配列をループするときに使う
Dim i As Long
For i = 0 To UBound(arr)
Debug.Print arr(i)
Next i
配列の長さが変わっても安全にループできます。
動的配列のサイズを調べる
Dim arr() As Long
ReDim arr(5)
MsgBox UBound(arr) '5
ReDim した配列でも UBound は使えます。
LBound と組み合わせる
配列の下限(通常は 0)を取得する
LBound(arr)
上限と下限を使ってループする
Dim i As Long
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
配列の開始位置が変わる可能性がある場合に安心です。
注意点(実務で気をつけたいこと)
空の配列に UBound を使うとエラー
→ 配列が空かどうかを事前にチェックすると安全です。
If Not IsEmpty(arr) Then
MsgBox UBound(arr)
End If
Variant 型でないと Split の結果を受け取れない
→ Split の戻り値は配列なので Variant が基本です。
配列の要素数と UBound は違う
→ 要素数 = UBound + 1 を忘れないように。
応用:配列が空かどうかを判定する関数
Function IsArrayEmpty(arr As Variant) As Boolean
On Error GoTo ErrHandler
IsArrayEmpty = (UBound(arr) < LBound(arr))
Exit Function
ErrHandler:
IsArrayEmpty = True
End Function
実務でよく使う“安全な配列チェック”です。
まとめ
- UBound は配列の「最大インデックス」を返す
- 要素数を知りたいときは UBound + 1
- Split と組み合わせると文字列処理が強くなる
- LBound と合わせて使うと安全
- 空配列への UBound はエラーになるため注意
UBound は、配列を“やさしく扱う”ための静かな相棒です。

配列の長さを知ることは、データを扱ううえでとても大切です。
UBound は、そんな配列の“輪郭”をそっと教えてくれる存在です。

配列の大きさがわかると、ループも安心して回せるね。
VBAは、こういう小さな気配りも得意なんだなあ。

コメント