- 「配列の長さがわからないからループが組めない…」
- 「ReDimした配列のサイズを動的に把握したい!」
- 「二次元配列だと、どうやってカウントするの?」
配列の要素数を自在に扱えるようになれば、柔軟なループ処理やエラーの少ない配列操作が可能になります!
この記事では、基本的なUBound/LBoundの使い方から、動的配列・二次元配列のサイズ取得までやさしく解説していきます!
要素数を取得するには?基本はUBoundとLBoundのセット
VBAには配列の要素数を直接返す関数はないため、UBound(最大インデックス)とLBound(最小インデックス)の差分を使って算出します。
固定長配列の要素数を計算する例
Sub CountFixedArray()
Dim fruits(1 To 5) As String
Dim count As Long
count = UBound(fruits) - LBound(fruits) + 1
MsgBox "要素数は " & count & " です"
End Sub
このコードでは、1〜5までの5要素を持つ配列fruits
の要素数を算出しています。
+1を忘れがちなので要注意!
インデックスの差だけだと「4」になってしまいます。
動的配列での要素数取得はエラーに注意!
動的配列(Dim arr() As ~)では、ReDimでサイズを指定するまでは配列が未初期化の状態です。
このままUBoundを使うとエラーになります。
IsArrayとエラーハンドリングで安全に取得
Function GetArrayCount(arr As Variant) As Long
On Error GoTo ErrHandler
If IsArray(arr) Then
GetArrayCount = UBound(arr) - LBound(arr) + 1
Else
GetArrayCount = -1 ' 配列でない
End If
Exit Function
ErrHandler:
GetArrayCount = 0 ' 初期化前は0として扱う
End Function
この関数を使えば、未初期化の配列にも安全に対応できます。
配列が存在しないときにエラーで止まる心配がないので、実務でもよく使われるパターンです。
二次元配列の行数・列数を取得するには?
二次元配列では、第2引数に1(行方向)または2(列方向)を指定することで、各次元の要素数を取得できます。
行数・列数を個別に取得するコード例
Sub Count2DArray()
Dim matrix(1 To 3, 1 To 4) As Integer
Dim rowCount As Long, colCount As Long
rowCount = UBound(matrix, 1) - LBound(matrix, 1) + 1
colCount = UBound(matrix, 2) - LBound(matrix, 2) + 1
MsgBox "行数: " & rowCount & ", 列数: " & colCount
End Sub
このコードでは、3行×4列の二次元配列matrix
に対して、行方向(1)・列方向(2)のUBoundとLBoundを使ってそれぞれのサイズを取得しています。
まとめ:配列サイズの取得でループ処理も自由自在!
UBoundとLBoundを正しく使いこなせば、あらゆる配列のサイズを安全・正確に取得可能になります。配列処理でのループや条件分岐が思い通りに書けるようになりますよ!
✅ 今回のまとめ
- 固定長配列の要素数は
UBound - LBound + 1
で求める! - 動的配列は初期化前に
UBound
を使うとエラーになるので注意! - 二次元配列は
UBound(arr, 次元)
で行・列を別々に取得!
配列のサイズが自在に扱えるようになれば、VBAの実用性がグンと広がります😊
コメント