構文など
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の値の列を変更すれば数量、粗利のデータを取得出来ます。