エクセルVBAで連想配列といえばDictionaryが思い浮かぶ人も多いはず。
でも、Dictionaryを使うには、事前に「Microsoft Scripting Runtime」を有効化する必要があって不便です。特に配布して他の人が利用するような場合には、わざわざMicrosoft Scripting Runtimeを有効化してもらわなければなりません。
これでは、Dictionaryは連想配列として使い物になりません。
Microsoft Scripting Runtimeを有効化しなくてもDictionaryを利用する方法も一応ある。
Microsoft Scripting Runtimeを有効化しなくてもDictionaryを利用する方法も一応あります。
1 2 3 4 5 6 7 8 9 |
Public Function Dict() As Dictionary Set Dict = CreateObject("Scripting.Dictionary") End Function Sub Sample() Dim dict As Dictionary Set dict = Dict '以下、処理を記載・・・ End Sub |
Public Function~End Functionを毎回記載した上で、Sub sample以下のようにDictionaryを使う方法です。
しかし、これは毎回、Public Function~End Functionを記載しなければならず、面倒です。
VBAでは連想配列代わりにCollectionを使うのがおすすめ
エクセルVBAでは連想配列代わりにCollectionを使うのが楽で便利でおすすめです。
1 2 3 4 5 6 7 |
Sub Sample() Dim dict As New Collection dict.Add Item:="item1",Key:="key1" 'dictに連想配列っぽくデータを入れる。 dict.Add "item2", "key2" 'こんな書き方もある。 MsgBox dict.Item("key1") 'item1が表示される。 MsgBox dict.Item("key2") 'item2が表示される。 End Sub |
こんな感じで簡単に連想配列っぽく使えます。
もちろん、わざわざ自作関数をつくる必要もありませんし、PHPやPython等の言語と比べても違和感ない感じに使えるので気に入っています。
もうVBAで連想配列を使いたいと思ったらCollection使う。でよいのでは???
コメント
格納したキーで「アルファベット大文字小文字を区別」したいとき
collectionでも、区別できますか?
MSDNでは明言されてないですが、Collectionのキーは全角、半角、大文字、小文字を区別できなかったはずです!