こんにちは。
派犬事務員のコロ子です。

以前に書いたブログのコードを見て「なんだコレ?」っていう変なコードがいっぱいある。なんか変だけど、そのときは真剣に書いていたから、それはそれでそのままにしておこう。「それは違ーーーう!!」と指摘してもらえたら嬉しいし。なんだコレ?のついでに、最近思いついたコードを載せてみよう。
DictionaryのItemが複数欲しい
Dictionaryオブジェクトのアイテムが複数欲しい!と思う事ない?
例えばこんなとき。
社名をキーにして、各商品の金額をアイテムに入れて合計を集計したい。

キー1つに対してこんなイメージで複数アイテムが欲しい。
Dictionaryオブジェクト.Add Key, Item1, Item2, Item3・・・ (あくまでもイメージ)
そうは言っても、キー1つに対してアイテム1つ。
アイテムにはオブジェクト型を入れる事も可能なので、複数の変数を用意したクラスを入れよう。
作り方
①クラスモジュールを作る
クラス名:Variable
②VariableクラスにPublic変数を3つ用意する
Public SampleA As Long
Public SampleB As Long
Public SampleC As Long

③コード(Sheetモジュール)
Sub Sample()
Dim dic As Dictionary
Set dic = New Dictionary
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Dim dickey As String
dickey = Cells(i, 1).Value
If dic.Exists(dickey) = False Then
'クラスのインスタンスを生成
dic.Add dickey, New Variable
End If
'生成した変数に金額を足していく
dic(dickey).SampleA = dic(dickey).SampleA + Cells(i, 2).Value
dic(dickey).SampleB = dic(dickey).SampleB + Cells(i, 3).Value
dic(dickey).SampleC = dic(dickey).SampleC + Cells(i, 4).Value
Next i
'確認
Dim buf As Variant
For Each buf In dic.Keys
Debug.Print buf, dic(buf).SampleA, dic(buf).SampleB; dic(buf).SampleC
Next buf
とりあえず急場はしのげた。
普通はこうするとか、もっと良い方法ありますか?
↓
Dictionaryオブジェクトを配列にする方法を教わった!
koroko.hatenablog.com
↓
アイテムを配列にする方法
koroko.hatenablog.com