透2017/8/142019/4/22Dictionary(連想配列)って使ってますか?連想配列はJavaScript、PHP、Pythonなどの言語でも使われていて、VBAでもDictionaryオブジェクトとして使うことができます。連想配列はキーとデータをセットで格納することができます。この記事では、Dictionary(連想配列)についてDictionaryオブジェクトとはDictionaryの使い方Dictionaryのkeyでソートする方法Dictionaryオブジェクトを参照設定で使う方法など基本的な内容から、応用的な使い方についても解説していきます。今回はDictionary(連想配列)について、使い方をわかりやすく解説します。まとめDictionaryオブジェクトとはDictionaryオブジェクトとはデータとキーをセットで格納するオブジェクトのことです。辞書、または連想配列とも呼びます。配列はインデックス番号(添字)と要素の値がセットなのに対して、連想配列はキー(Key)とデータ(Item)がセットになっています。配列のインデックス番号は0(ゼロ)から順に整数が割り当てられますが、連想配列のキーは指定することができて整数の他にも文字列などを指定することができます。キーを重複させることはできません。Dictionaryの使い方Dictionaryオブジェクトを使うためのプロパティとメソッドについて一覧にしました。キーを区別する際に、大文字と小文字を区別するか否か指定vbBinaryCompare(0):大文字と小文字を区別vbTextCompare(1):大文字と小文字を区別ぜずDictionaryオブジェクトはキーを重複させることはできませんが、CompareModeプロパティを使ってキーの大文字と小文字を区別するかどうか設定することができます。する方法Dictionaryオブジェクトを宣言し使用するためには、CreateObject関数を使ってオブジェクト型の変数に格納する必要があります。CreateObject(“Scripting.Dictionary”)なお、オブジェクト型の変数に格納するにはSetステートメントが必要です。Dictionaryオブジェクトを初期化、および要素を追加するにはAddメソッドを使用します。サンプルコードで確認しましょう。Sub実行結果:このサンプルコードではCreateObject関数を使って、オブジェクト型変数myDicにDictionaryオブジェクトを格納しています。myDicオブジェクトからAddメソッドを呼び出し、それぞれの要素のキーとデータを追加してます。myDicオブジェクトのKeysメソッドで返す配列をバリアント型の配列Keysに格納しています。For文を使って配列Keysの要素を取得し、また取得したKeysの要素を指標にItemプロパティを使ってデータを取得しています。Each文を使うともっと簡単な記述で要素を参照取得することができます。Each文ではInでDictionaryオブジェクトのキーを取得することができます。取得したキーはバリアント型になります。サンプルコードで確認していきましょう。Each文を使ってDictionaryオブジェクトmyDicのキーとデータを参照取得しています。keysメソッドで返す配列を使用して記述するよりも手短に記述できています。次にRemoveメソッドを使って要素を削除する方法についてサンプルコードで確認していきましょう。Sub実行結果:このサンプルコードでは、Removeメソッドを使って対象のキーを指定してDictionaryオブジェクトの要素を削除しています。先ほどのサンプルコードでは、Dictionaryオブジェクトの要素を削除する際に要素が存在するか確認せずに削除しました。要素がない場合に削除すると「アプリケーション定義またはオブジェクト定義」のエラーが発生します。エラーが発生しないようにするために、要素が存在するか確認して削除することをオススメします。要素が存在するか確認するにはExistsメソッドを使用します。サンプルコードで確認していきましょう。Sub実行結果:このサンプルコードでは、DictionaryオブジェクトmyDicからExistsメソッドを呼び出しています。要素が存在するか確認したあとで、Removeメソッドを使って要素を削除しています。Dictionaryのkeyでソートする方法Dictionaryオブジェクトはソートするメソッドを実装していないので、記述作成する必要があります。キーの値が数値の場合は、バブルソートやクイックソートなどで記述することもできますが、文字列の場合はStrComp関数を使って比較するなど複雑になってきて記述にも時間がかかります。そこでオススメするのが、RangeオブジェクトのSortメソッドを使用する方法です。エクセルシート上のソートを利用します。それではサンプルコードで確認していきましょう。Sub実行結果:このサンプルコードではまず、VBAで作成したDictionaryオブジェクトの要素をエクセルシートのセルに入力しています。次に、RangeオブジェクトSortメソッドを使用してエクセルシート上でDictionaryオブジェクトのキーをソートしています。エクセルシートの実行結果を確認するとA列の値でB列もセットでソートされていることがわかります。エクセルシート上のソートの結果を、元のDictionaryオブジェクトの要素に格納して出力表示しています。Dictionaryオブジェクトを参照設定で使う方法Dicotnaryオブジェクトは参照設定を行い、「New」句を使って作成することもできます。参照設定を行う方法は下記のとおりです。Applicationsの「ツール」メニューから「参照設定」をクリックします。Runtime」にチェックします。OKボタンをクリックし、「参照設定」ダイアログを閉じます。「New」句を使った宣言は下記のとおりです。Scripting.Dictionaryそれではサンプルコードで確認していきましょう。Sub実行結果:このサンプルコードでは、DictionaryオブジェクトmyDicを「New」句を使って宣言しています。まとめここではDictionaryオブジェクト(連想配列)について説明しました。連想配列は、キーとデータをセットで扱うことができるので便利です。使いこなすことができるように、この記事を何度も参考にして下さいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。お問合せはこちらでも受け付けています。