Scripting.Dictionaryをもう少しだけ使いやすく。
VBAにおけるディクショナリ
VBAには標準の配列データ型以外に、Dictionaryというデータ型を用いることが出来ます。
Dictionary型のデータを使う為には、大別して2つの方法が存在します。
ファクトリ関数を用いた改善。
1.の方法は簡潔ですが汎用性がありません。一方2.の方法は汎用性がありますが、呪文めいていて、慣れない人には難しいものがあるかと思います。
ファクトリ関数を用いることでこの問題を多少改善することができます。
Factoriesという名前をつけた標準モジュールにおいて以下のようなディクショナリを返すファクトリ関数を記述するとします。
Public Function Dict() As Dictionary Set Dict = CreateObject("Scripting.Dictionary") End Function
この簡単なファクトリ関数を用いることで、
Dim dict As Dictionary Set dict = Dict
という比較的直感的にディクショナリ型のデータを使用することができるようになります。
番外編:Collectionを用いる方法
VBA標準のCollection型を用いる方法もあります。
Collection型のデータは一般的に動的配列として使用するものだと認知されていると思われますが、実はディクショナリとしても使用することが出来ます。
一般的なCollection型データの使用方法。
Dim collect As New Collection 'Dictionaryと異なり事前の設定は不要 collect.Add 1 collect.Add hello MsgBox collect.Item(1) '1を表示 MsgBox collect.Item(2) '"hello"を表示
と、このように一般的な動的配列の用途しかなさそうなCollectionデータ型ですが以下のように使うこともできます。
Dim colDict As New Collection colDict.Add Item:="world",Key:="hello" colDict.Add "hoge", "fuga" 'Dictionary型とは逆で第一引数に要素、第二引数がキーです。 MsgBox colDict.Item("hello") '"world"を表示 MsgBox colDict.Item("fuga") '"hoge"を表示
身も蓋も無い話をしてしまえば、Dictionary型は使用せずにすべてCollection型で統一してしまうのが、もっとも利便性が高いのかもしれません。
参考:
http://members3.jcom.home.ne.jp/daruma_kyo/info/redim_or_collection.html#df
2009-08-08