ExcelVBA

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

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

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

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

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

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

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

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

'LBound関数の使い方(一次元配列の場合)
Sub test_array1D()
    '■配列の宣言
    Dim arr1(10) As Variant
    Dim arr2(1 To 20) As Long
    Dim arr3(2 To 30) As String
    
    MsgBox LBound(arr1) '0    'OptionBase1 なら1
    MsgBox LBound(arr2) '1
    MsgBox LBound(arr3) '2
End Sub

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

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

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

    MsgBox LBound(arr2, 1) '1
    MsgBox LBound(arr2, 2) '10
    MsgBox LBound(arr2, 3) '20

End Sub

その他

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

関連記事

実務でLBound関数は、配列をFor文でLoopする時の最小値を取得する事が多いです。
下記のような形で使うことが多いでしょう。

'iは1次元目、jは2次元目
For i = LBound(arr, 1) To UBound(arr, 1)
  For j = LBound(arr, 2) To UBound(arr, 2)
  Next j
Next i

逆にUbound関数は使う部分が多いので、そちらは必須で覚えましょう。

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

コメント

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