Scripting.Dictionaryをもう少しだけ使いやすく。

VBAにおけるディクショナリ

VBAには標準の配列データ型以外に、Dictionaryというデータ型を用いることが出来ます。
Dictionary型のデータを使う為には、大別して2つの方法が存在します。

1.宣言 Dim dict As New Dictionary を用いる方法。

これは一見お手軽な方法ですが、事前にVBエディタの[ツール(T)]->[参照設定(R)]から[Microsoft Scripting Runtime]のチェック欄にチェックを入れておく必要があります。

この設定後であれば、

Dim dict As New Dictionary

と宣言することでディクショナリ型が使えるようになります。
しかしながら、上記設定をしておかなければ、上記宣言はエラーとなってしまいますので、例えば配布する必要があるEXCELシートで使用する場合、余計な手間、コストがかかることとなります。

2.CreateObject関数を用いる方法。

CreateObject関数はWindowsにおいて基盤部品であるCOMオブジェクトを呼び出す関数です。
この関数を用いることで、1.のような事前の設定無しにディクショナリ型を用いることができます。
宣言例:

Dim dict As Dictionary
Set dict = CreateObject("Scripting.Dictionary")

この方法であれば、たとえ配布するEXCELシートであってもエラー無しに使用することができます。
ただ、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