こんにちは、Ryoです。
配列の内容に対し、文字列を使用して検索することができる「連想配列」という手段があります。これはCreateObject関数を使用してDictionaryオブジェクトに検索キーと内容を追加することで利用できますので、今回はその方法について書いていきます。
1.サンプル概要
例としてサンプルコードに検索用のキーと県名をセットしていきます。
検索キーと対象の県名を追加していきますので、サンプルコード内で検索キー「CB」を指定しメッセージボックスで内容を表示させると以下のように「千葉県」となります。
以上がサンプル概要になります。
2.サンプルコード
Sub Sample1() With CreateObject("Scripting.Dictionary") 'Keyを「AM」として「青森県」を追加 .Add "AM", "青森県" 'Keyを「AK」として「秋田県」を追加 .Add "AK", "秋田県" 'Keyを「CB」として「千葉県」を追加 .Add "CB", "千葉県" 'Key「CB」の値を検索してメッセージ表示 MsgBox "Key [CB]:" & .Item("CB") End With End Sub
連想配列とは「文字列をキーとする配列」になります。この連想配列を利用するにはCreateObject関数を利用します。
構文:CreateObject(class,[servername])
引数classに「Scripting.Dictionary」を指定し、Dictionaryオブジェクトを作成します。この作成したDictionaryオブジェクトにAddメソッドで項目を追加しますが、指定としては最初の引数がKey、2番目の引数がItemとなります。
メッセージボックスではキーに設定した”CB”を検索し、そのItemである「千葉県」を表示させるという形になります。
同じような形で自宅/勤務先/携帯をそれぞれ検索キーとして、各電話番号をItemとして登録し、メッセージボックスで「勤務先」のItemを表示させると、このように勤務先電話番号を表示します。
Sub Sample2() With CreateObject("Scripting.Dictionary") 'Keyを「自宅」として自宅のTEL番号を追加 .Add "自宅", "00-111-2222" 'Keyを「勤務先」として勤務先TEL番号を追加 .Add "勤務先", "01-234-5678" 'Keyを「携帯」として携帯TEL番号を追加 .Add "携帯", "000-2222-3333" 'Key「勤務先」の値を検索して電話番号表示 MsgBox "Key [勤務先]:" & .Item("勤務先") End With End Sub
このように配列データを検索キーと紐づけることができます。
3.まとめ
簡単な例で連想配列の内容について書いていますが、具体的に使用する場合でもDictionaryオブジェクトに対象とする配列データをAddメソッドで追加していく形は同じです。
その場合、検索キーに同じデータが存在するとエラーとなってしまうのでOn Error Resume Nextなどを使って重複時には無視するような形をとって利用すれば大丈夫です。知っておくと何かと便利なので利用機会があればぜひご検討くださいませ。
以上、連想配列でデータを扱う方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo