VBA DictionaryオブジェクトのItemが複数欲しい!(クラス編)
こんにちは。
派犬事務員のコロ子です。
以前に書いたブログのコードを見て「なんだコレ?」っていう変なコードがいっぱいある。なんか変だけど、そのときは真剣に書いていたから、それはそれでそのままにしておこう。「それは違ーーーう!!」と指摘してもらえたら嬉しいし。なんだコレ?のついでに、最近思いついたコードを載せてみよう。
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