VBAで配列を扱っていると、次のようなことはありませんか?
- 配列の最後の要素番号を知りたい
- For文で配列を最後まで処理したい
- 配列サイズが分からない状態でループしたい
このような場合は、UBound関数を使うことで解決できます。
配列の上限(最大インデックス番号)を取得できる便利な関数です。
この記事では、UBound関数の基本から実務での活用方法まで分かりやすく解説します。
この記事でできること
- 配列の最大要素番号を取得できる
- 配列を安全にループできる
- 多次元配列にも対応できる
UBound関数とは?
UBound(Upper Bound)は、配列の上限番号を返す関数です。
例えば次の配列の場合、
Dim arr(5) As String
要素番号は次のようになります。
0
1
2
3
4
5
UBound(arr) の結果は「5」になります。
基本:UBound関数の使い方
基本構文はこちらです。
UBound(配列)
基本例
Dim arr(5) As String
MsgBox UBound(arr)
→ 5
配列をループ処理する
UBoundはFor文と組み合わせて使うことが多いです。
Dim arr(5) As String
Dim i As Long
For i = 0 To UBound(arr)
arr(i) = "データ" & i
Next i
LBoundと組み合わせる(おすすめ)
配列の開始位置が不明な場合はLBoundとセットで使用します。
Dim i As Long
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
動的配列で使う
Dim arr() As String
ReDim arr(10)
MsgBox UBound(arr)
→ 10
多次元配列で使う
第2引数で次元を指定できます。
Dim arr(2, 3) As String
MsgBox UBound(arr, 1)
→ 2
MsgBox UBound(arr, 2)
→ 3
配列の要素数を取得する
要素数は次のように取得できます。
Dim cnt As Long
cnt = UBound(arr) - LBound(arr) + 1
MsgBox cnt
Split関数と組み合わせる
文字列を分割した配列の件数確認によく使います。
Dim arr
arr = Split("A,B,C,D", ",")
MsgBox UBound(arr)
→ 3
実務での活用例
- CSVデータ処理
- 配列ループ
- データ集計
- 動的配列管理
配列処理では必須レベルの関数です。
注意点
① 要素数ではない
UBoundは最大インデックス番号です。
Dim arr(5)
要素数は6です。
② 初期化されていない動的配列はエラー
Dim arr()
MsgBox UBound(arr)
→ エラー
③ Option Baseに注意
開始番号が変わる場合があります。
Option Base 1
安全な書き方(おすすめ)
Dim arr As Variant
arr = Split("A,B,C", ",")
If IsArray(arr) Then
Dim i As Long
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
End If
よくあるエラーと対処法
① インデックスが範囲外です
UBoundを超えてアクセスしている可能性があります。
② 配列が初期化されていない
ReDim後に使用してください。
③ 要素数が合わない
UBoundは最大番号であり件数ではありません。
④ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- UBoundは配列の最大要素番号を取得する関数
- For文との組み合わせが基本
- LBoundとセットで使うのがおすすめ
- 配列処理では必須レベルの関数
UBound関数を使いこなせるようになると、配列処理が格段に楽になります。
VBAで配列を扱うなら必ず覚えておきたい重要関数です。

コメント