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関数は使う部分が多いので、そちらは必須で覚えましょう。
コメント