派遣事務員の迷走

派遣事務員コロ子。会社の犬。顔出しNG。常に迷走している。

VBA DictionaryオブジェクトのItemが複数欲しい!(クラス編)

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

f:id:SNegishi:20210316221229j:plain
新しい首輪 Amazfit Band 5

以前に書いたブログのコードを見て「なんだコレ?」っていう変なコードがいっぱいある。なんか変だけど、そのときは真剣に書いていたから、それはそれでそのままにしておこう。「それは違ーーーう!!」と指摘してもらえたら嬉しいし。なんだコレ?のついでに、最近思いついたコードを載せてみよう。

DictionaryのItemが複数欲しい

Dictionaryオブジェクトのアイテムが複数欲しい!と思う事ない?
例えばこんなとき。
社名をキーにして、各商品の金額をアイテムに入れて合計を集計したい。

f:id:SNegishi:20210328151846p:plain

キー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

f:id:SNegishi:20210328155532p:plain

③コード(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