VBAの話。最近、今更ながらDictionaryオブジェクトに凝っており(笑)。
VBAでDictionaryの簡易版といえばCollectionオブジェクトなのですが、
ちょっとマニアックな話をするとこのCollectionオブジェクト、要素をAddメソッドで追加する際にItemとKeyを追加することができるのですが、
VBAのCollectionは要素番号等で指定してKeyだけを取り出す、ということができないんですよね…まぁわたしが知らないだけかもしれませんが(^^;。
で、ついこの間までCollectionの上位互換のような存在のDictionaryも同じだと思い込んでいたのですが-。…すみません完全に勉強不足でしたDictionaryさんごめんなさいm(_ _)m(笑)。
↓のように、DictionaryをFor Each ~Nextループで回していくと、Collectionと違って
取り出せるのが【Item】ではなく【Key】だから、↓のような書き方でKeyとItem、両方取り出すことができたんですね…。
何だか本当に今更ながらの発見ですorz。で、今更ながらDictionaryで【こういうこと】ができるということが分かったので、
今更ながらDictionaryオブジェクトにハマっているというわけですわ(苦笑)。しかもこれも今更なのですが、あ~Dictionaryってこんなに便利だったんだって(笑)。
Sub DictionaryTest()
Dim ws_d As New Dictionary
Dim objSh As Worksheet
For Each objSh In ThisWorkbook.Worksheets
ws_d.Add Key:=objSh.Name, Item:=objSh.Range("a1").Value
Next
Dim objKey As Variant
For Each objKey In ws_d
MsgBox "Key: " & objKey & "," _
& "Item: " & ws_d(objKey), vbInformation
Next
End Sub
VBAでDictionaryの簡易版といえばCollectionオブジェクトなのですが、
ちょっとマニアックな話をするとこのCollectionオブジェクト、要素をAddメソッドで追加する際にItemとKeyを追加することができるのですが、
VBAのCollectionは要素番号等で指定してKeyだけを取り出す、ということができないんですよね…まぁわたしが知らないだけかもしれませんが(^^;。
で、ついこの間までCollectionの上位互換のような存在のDictionaryも同じだと思い込んでいたのですが-。…すみません完全に勉強不足でしたDictionaryさんごめんなさいm(_ _)m(笑)。
↓のように、DictionaryをFor Each ~Nextループで回していくと、Collectionと違って
取り出せるのが【Item】ではなく【Key】だから、↓のような書き方でKeyとItem、両方取り出すことができたんですね…。
何だか本当に今更ながらの発見ですorz。で、今更ながらDictionaryで【こういうこと】ができるということが分かったので、
今更ながらDictionaryオブジェクトにハマっているというわけですわ(苦笑)。しかもこれも今更なのですが、あ~Dictionaryってこんなに便利だったんだって(笑)。
Sub DictionaryTest()
Dim ws_d As New Dictionary
Dim objSh As Worksheet
For Each objSh In ThisWorkbook.Worksheets
ws_d.Add Key:=objSh.Name, Item:=objSh.Range("a1").Value
Next
Dim objKey As Variant
For Each objKey In ws_d
MsgBox "Key: " & objKey & "," _
& "Item: " & ws_d(objKey), vbInformation
Next
End Sub