こんにちは。
派犬事務員のコロ子です。
前回「Dictionaryオブジェクトのアイテムが複数欲しい!」という記事を書いたら「Dictionaryオブジェクトを配列にすればよい」と教わった。
前回はクラスで変数を作る方法でしのいだ↓
koroko.hatenablog.com
Dictionaryオブジェクトを配列??にするのですか!!!
む、むずい。
頭の中ぐるぐる混乱。
社名をキーにして、各商品の金額をアイテムに入れて合計を集計したい。
Dictionaryオブジェクトを3個作って列ごとに集計するイメージでいいのでしょうか?

Infomentさんのブログを見ながら作成してみた。
infoment.hatenablog.com
Enum 列名
社名 = 1
商品A
商品B
商品C
End Enum
Sub test1()
Dim dic(列名.商品A To 列名.商品C) As Dictionary
Dim c As Long
For c = 列名.商品A To 列名.商品C
Set dic(c) = New Dictionary
Dim r As Long
For r = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Dim dickey As String
dickey = Cells(r, 列名.社名)
dic(c)(dickey) = dic(c)(dickey) + Cells(r, c)
Next r
Next c
'確認
For c = 列名.商品A To 列名.商品C
Dim buf As Variant
For Each buf In dic(c).Keys
Debug.Print Cells(1, c), buf, dic(c)(buf)
Next buf
Next c
End Sub
せっかく配列なので、Infomentさんのブログをまねして、元のシートも配列に入れてみよう。
Enum 列名
社名 = 1
商品A
商品B
商品C
End Enum
Sub TEST2()
Dim arr As Variant
arr = UsedRange.Resize(UsedRange.Rows.Count - 1, UsedRange.Columns.Count).Offset(1, 0)
Dim dic(列名.商品A To 列名.商品C) As Dictionary
Dim c As Long
For c = 列名.商品A To 列名.商品C
Set dic(c) = New Dictionary
Dim r As Long
For r = 1 To UBound(arr)
dic(c)(arr(r, 列名.社名)) = dic(c)(arr(r, 列名.社名)) + arr(r, c)
Next r
Next c
'確認
For c = 列名.商品A To 列名.商品C
Dim buf As Variant
For Each buf In dic(c).Keys
Debug.Print Cells(1, c), buf, dic(c)(buf)
Next buf
Next c
End Sub
元のシートも配列にするとさらにぐるぐる度が上がる~。
自力では絶対考えつかないなー。
Infomentさん、ExcelVBAerさん、どうもありがとうございました!
【次回】アイテムを配列にする方法↓
koroko.hatenablog.com