Home » Dictionaryオブジェクトの使い方 » CollectionのKeyを指定して要素を取得する

CollectionのKeyを指定して要素を取得する

「excel vba collection keyで検索」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

VBA(Visual Basic for Applications)の、Collectionオブジェクトに格納されている要素・データを、

CollectionのKeyを指定して要素を取得する

Keyを使って取得するにはどのようなコードを書けばいいのか、探している方による検索です。

[スポンサードリンク]

CollectionのKeyを指定してItemを取得するサンプルマクロ

簡単なサンプルマクロをご紹介しておきます。

Sub CollectionのKeyを指定してItemを取得する()

 Dim coll As Collection
 Dim fnd_key As String

 Set coll = New Collection

 coll.Add Item:="松", Key:="イ"
 coll.Add Item:="竹", Key:="ロ"
 coll.Add Item:="梅", Key:="ハ"

 On Error GoTo ERR_HNDL
 fnd_key = InputBox("イ・ロ・ハ のいずれかを入力してください。")
 MsgBox coll.Item(fnd_key)

 Exit Sub

ERR_HNDL:
 Err.Clear
 MsgBox "みつかりませんでした。"

End Sub

上記のマクロを実行すると、
「イ・ロ・ハ のいずれかを入力してください。」
というインプットボックスが表示され、入力されたKeyによって、松・竹・梅 いずれかの文字列がメッセージボックスに表示されます。

サンプルマクロの解説

変数宣言の直後の、
 coll.Add Item:="松", Key:="イ"
 coll.Add Item:="竹", Key:="ロ"
 coll.Add Item:="梅", Key:="ハ"
が、CollectionオブジェクトにAddメソッドを使ってデータを格納している部分です。

CollectionのKeyを指定して要素を取得する

KeyからItemを取得するのが、
 fnd_key = InputBox("イ・ロ・ハのいずれかを入力してください。")
 MsgBox coll.Item(fnd_key)
の部分です。

CollectionオブジェクトのItemメソッドに、

CollectionのKeyを指定して要素を取得する

Keyの文字列を指定すれば、該当するデータを取得することができます。

Dictionaryオブジェクトを使うほうがよくありませんか

「excel vba collection keyで検索」
という検索キーワードでしたので、Collectionを使った簡単なマクロをご紹介しましたが、CollectionオブジェクトよりもDictionaryオブジェクトを使うほうがいいのではないか、という気がしてなりません。

複数のデータを一時的に入れておくというだけなら、まあCollectionでもいいと思うのですが、
「excel vba collection keyで検索」
という検索キーワードからは、簡易テーブル的な使い方をしようとしていることが容易に想像できます。

このような場合、できることが限られいてデバッグ作業も行い辛いCollectionより、Dictionaryのほうがいいように感じます。

オブジェクトブラウザーをちょっと眺めるだけでも、Collectionオブジェクトのほうが、

CollectionのKeyを指定して要素を取得する

Dictionaryオブジェクトよりも

CollectionのKeyを指定して要素を取得する

プロパティ・メソッドが少ないですから、できることが少ないのは一目瞭然です。

ちなみに、先のマクロと同じことをDictionaryオブジェクトで行う場合、以下のようなプロシージャです。

Sub DictionaryのKeyを指定してItemを取得する()

 Dim dic As Object ' Scripting.Dictionary
 Dim fnd_key As String

 Set dic = CreateObject("Scripting.Dictionary")

 dic.Add Key:="イ", Item:="松"
 dic.Add Key:="ロ", Item:="竹"
 dic.Add Key:="ハ", Item:="梅"

 On Error GoTo ERR_HNDL
 fnd_key = InputBox("イ・ロ・ハ のいずれかを入力してください。")
 MsgBox dic.Item(fnd_key)

 Exit Sub

ERR_HNDL:
 Err.Clear
 MsgBox "みつかりませんでした。"

End Sub

15年ほど前ならば、Dictionaryを使えない環境のことをまだまだ考えざるを得ませんでしたから、Collectionを使うという選択肢も十分ありましたが、2016年現在、もうそんなことは考える必要はないでしょう。簡易テーブル的にデータを格納するならば、CollectionよりDictionaryだろうと私は思っています。

I strongly recommend that you use a Dictionary object in place of the Collection object. The Dictionary object is fast in comparison to the Collection, and it has more functionality.

1998年10月に出版された『Vb & Vba in a Nutshell』の73ページにも、以上のような記述があります。

[スポンサードリンク]

Home » Dictionaryオブジェクトの使い方 » CollectionのKeyを指定して要素を取得する

「Dictionaryオブジェクトの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.