配列(連想配列:ハッシュ)の使い方 (Dictionary)



構文など
Set ◯◯ = CreateObject(Scripting.Dictionary )

Key(キー)とItem(値)の組みとなる連想配列(ハッシュ)を扱うDictionaryオブジェクトの使用方法です。
WorksheetFunctionのSumIfのような条件付きでの集計は、対象レコード数が多いと割りと時間がかかりますが、配列化してから加算するとより高速化することが可能かもしれないです。(サンプル1)

また、セル上からKey、及びItemの値を取得する場合はセルのaddressだけでなく.Valueとして値を指定します。

名前 説明
Add レコードを追加する
Remove レコードを削除する
Exists 指定されたキー(key)が存在するかどうか
RemoveAll レコードを全て削除する
Keys キーを配列にして返す
Items 値(Item)を配列にして返す
メソッド一覧


名前 説明
Count Dictionaryのレコード数を返す
Item Itemに対するKeyを返す
Key Keyに対するItemを返す
CompareMode 文字列比較キー比較モードの設定
プロパティ一覧


サンプルコード
サンプル用Excelファイル
Sub DicTest2()
Dim Ws1 As Worksheet, DicT As Object, LR As Long, Ke, It

Set Ws1 = Workbooks("ハッシュ3ple.xls").Worksheets(1)
'Dictionaryオブジェクトをセット
Set DicT = CreateObject("Scripting.Dictionary")
'範囲の最終セル取得
LR = Ws1.Cells(Rows.Count, 1).End(xlUp).Row
    '配列化
    Dim i As Long
      '範囲内でKey取得を繰り返す
       For i = 2 To LR
       'Keyが既に配列にある場合は金額を加算する
        If DicT.Exists(Ws1.Cells(i, 1).Value) Then
            DicT.Item(Ws1.Cells(i, 1).Value) = _
            DicT.Item(Ws1.Cells(i, 1).Value) + Ws1.Cells(i, 4).Value
        Else
       'Keyがなければ配列に追加する
            DicT.Add Ws1.Cells(i, 1).Value, Ws1.Cells(i, 4).Value
        End If
       Next i
        
    '取得したKeyをセルに返す
    Ke = DicT.keys
    For i = 0 To DicT.Count - 1
    Ws1.Cells(2 + i, 8) = Ke(i)
    Next i
    
    '合計したItemをセルに返す
    It = DicT.Items
    For i = 0 To DicT.Count - 1
    Ws1.Cells(2 + i, 10) = It(i)
    Next i
    
End Sub

エクセル上のHにKey、JにItemを表示しています。
Itemの値の列を変更すれば数量、粗利のデータを取得出来ます。


関連・類似ページ
検索条件一致集計[SumIf]メソッド