\ お問い合わせはこちら! /

【VBA 配列の要素数を完全理解】UBound/LBoundで柔軟な配列処理を!

  • 「配列の長さがわからないからループが組めない…」
  • 「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の実用性がグンと広がります😊

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

CFXLOGのアバター CFXLOG プログラマ

メイン言語はPython。本ブログでは、実務や普段の学習で学んだことをアウトプットしています。
基本情報技術者試験合格者。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)