こんな配列の使い道があったんだ!と感激したので、備忘録。
次のような表で、配列を使って、商品番号が「P_1001」の売上合計をメッセージボックスに表示させてみます。
Sub goukei()
Dim myRange As Range
Dim myArray As Variant
Dim i As Long
Dim total As Long
‘セルA1を含む表に対して見出し行を除いたセル範囲を変数myRangeに代入
With Range(“A1”).CurrentRegion
Set myRange = .Resize(.Rows.Count – 1).Offset(1)
End With
‘変数myArrayにmyRangeのセル範囲の値をそっくり代入
myArray = myRange.Value
For i = LBound(myArray) To UBound(myArray)
If Cells(i, 2) = “P_1001” Then
total = total + Cells(i, 7)
End If
Next
MsgBox total
End Sub
実行結果
「myArray = myRange.Value」の行で変数myArrayにセル範囲myRangeの値をそっくり代入しているところがポイント。
この表の例ではmyArray(1 To 19 , 1 To 7))という縦(行)横(列)の2次元配列ができあがります。
LBound関数→インデックス番号の最小値
UBound関数→インデックス番号の最大値
この例では行方向のLBoundは「1」UBoundは「19」
For i = LBound(myArray) To UBound(myArray)の行で
1行目から、19行目まで繰り返しています。
配列を使うと、セル参照の回数が少なくなるので、プログラムを実行したときに、処理時間が短いということです。
今回のような例ではデータ量が少ないので、配列を使う、使わないによって処理時間に大きな差がでるということはありません。データ量が多くても、ある程度までは、配列を使わない方が、処理速度が速いってケースもありましたので為念。