ExcelVBA

一次元/二次元配列の要素数の最大値を取得する【Ubound関数】

VBAで高速処理に欠かせない配列処理

ExcelVBAマクロは動作が遅いと言われがちです。それは大きな間違いです。
大体そういう方は、大量のデータをワークシート内のセルで、検索代入計算しており
その処理方法が間違いです。

一次元配列もしくは二次元配列にデータを格納してから処理をすることで、
速度の改善が見込めます。

ただ、配列処理となると厄介だから勉強していない!という初心者の方も多いでしょう。

単純に、ワークシート内のセル範囲配列同様と考えると簡単かもしれません。

Ubound関数で配列の最大値(最大の添字)を取得(一次元配列)

UBound関数は指定した配列で使用できる、最も大きいインデックス番号を長整数型 (Long)の値で取得します。

'Ubound関数の使い方(一次元配列の場合)
Sub test_array1D()
    '■配列の宣言
    Dim arr1(10) As Variant
    Dim arr2(20) As Long
    Dim arr3(30) As String
    
    MsgBox UBound(arr1) '10
    MsgBox UBound(arr2) '20
    MsgBox UBound(arr3) '30
End Sub

Ubound関数で配列の最大値(最大の添字)を取得(二次元配列)

一次元配列と異なり、二次元配列(多次元配列)の場合は引数として取得したい配列の次元を加えます。

'Ubound関数の使い方(二次元配列の場合)
Sub test_array2D()
    '■配列の宣言
    Dim arr1(10, 20, 30) As Variant
    
    MsgBox UBound(arr1, 1) '10
    MsgBox UBound(arr1, 2) '20
    MsgBox UBound(arr1, 3) '30
End Sub

その他

  • 配列内の最大値(最大のインデックス番号)を取得する為、Option Baseに影響は受けません
    (逆にLboundは影響受けます)
  • 本記事では最大のインデックス番号を最大値という表現でしております。
    ※実際の最大値はSortする時の昇順、降順で使用する最大値の意味合いのが大きい為、イメージでのご案内です。

関連記事

Ubound関数は配列を使用するにあたり、必須で覚えてください。
配列の最小値から最大値までFor文でLoopしたり、配列の要素数を増やす場合に
配列内の最大値を把握する事は必須です。

ExcelVBAマクロ「二次元配列を動的に行数(一次元目)を増やす」をパーツ化する
ExcelVBAマクロ「二次元配列で任意の列をキーにソート」をパーツ化する

コメント

タイトルとURLをコピーしました