Excel VBA配列の使い道(二次元配列)

こんな配列の使い道があったんだ!と感激したので、備忘録。

次のような表で、配列を使って、商品番号が「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行目まで繰り返しています。

配列を使うと、セル参照の回数が少なくなるので、プログラムを実行したときに、処理時間が短いということです。

今回のような例ではデータ量が少ないので、配列を使う、使わないによって処理時間に大きな差がでるということはありません。データ量が多くても、ある程度までは、配列を使わない方が、処理速度が速いってケースもありましたので為念。

よかったらシェアしてね!

この記事を書いた人

目次
閉じる