【VBA入門】Dictionaryオブジェクト(連想配列)の使い方

Dictionary(連想配列)って使ってますか?

連想配列はJavaScript、PHP、Pythonなどの言語でも使われていて、VBAでもDictionaryオブジェクトとして使うことができます。連想配列はキーとデータをセットで格納することができます

この記事では、Dictionary(連想配列)について

  • Dictionaryオブジェクトとは
  • Dictionaryの使い方
  • Dictionaryのkeyでソートする方法
  • Dictionaryオブジェクトを参照設定で使う方法

など基本的な内容から、応用的な使い方についても解説していきます。

今回はDictionary(連想配列)について、使い方をわかりやすく解説します。

Dictionaryオブジェクトとは

Dictionaryオブジェクトとはデータとキーをセットで格納するオブジェクトのことです。辞書、または連想配列とも呼びます。

配列はインデックス番号(添字)と要素の値がセットなのに対して、連想配列はキー(Key)とデータ(Item)がセットになっています。

配列のインデックス番号は0(ゼロ)から順に整数が割り当てられますが、連想配列のキーは指定することができて整数の他にも文字列などを指定することができます。

ただし、キーを重複させることはできません。

Dictionaryの使い方

Dictionaryオブジェクトを使うためのプロパティとメソッドについて一覧にしました。

プロパティ:

プロパティ説明
Count連想配列に格納された要素の数
Item(key)キーに関連付けられた項目
Key(key)キー
CompareModeキーを区別する際に、大文字と小文字を区別するか否か指定
vbBinaryCompare(0):大文字と小文字を区別
vbTextCompare(1):大文字と小文字を区別ぜず

Dictionaryオブジェクトはキーを重複させることはできませんが、CompareModeプロパティを使ってキーの大文字と小文字を区別するかどうか設定することができます。

メソッド:

メソッド説明
Add key, itemキーに項目を関連付けて追加
Exists(key)指定したキーが存在すればTrueを返す
Items連想配列の項目を配列にして返す
配列のインデックス番号は0(ゼロ)から
Keys連想配列のキーを配列にして返す
配列のインデックス番号は0(ゼロ)から
Remove keyキーと項目のペアを削除
RemoveAll全てのキーと項目を削除

それではDictionaryオブジェクトのプロパティやメソッドの使い方についてサンプルコードで確認していきましょう!

宣言、初期化、追加、参照する方法

Dictionaryオブジェクトを宣言し使用するためには、CreateObject関数を使ってオブジェクト型の変数に格納する必要があります。

なお、オブジェクト型の変数に格納するにはSetステートメントが必要です。

Dictionaryオブジェクトを初期化、および要素を追加するにはAddメソッドを使用します。

サンプルコードで確認しましょう。

実行結果:
dictionary_ini

このサンプルコードではCreateObject関数を使って、オブジェクト型変数myDicにDictionaryオブジェクトを格納しています。

myDicオブジェクトからAddメソッドを呼び出し、それぞれの要素のキーとデータを追加してます。myDicオブジェクトのKeysメソッドで返す配列をバリアント型の配列Keysに格納しています。

For文を使って配列Keysの要素を取得し、また取得したKeysの要素を指標にItemプロパティを使ってデータを取得しています。

For Each文を使って参照する方法

For Each文を使うともっと簡単な記述で要素を参照取得することができます。For Each文ではInでDictionaryオブジェクトのキーを取得することができます

取得したキーはバリアント型になります。

サンプルコードで確認していきましょう。

実行結果:
dictionary_ini

このサンプルコードでは、For Each文を使ってDictionaryオブジェクトmyDicのキーとデータを参照取得しています。

keysメソッドで返す配列を使用して記述するよりも手短に記述できています

Removeで削除する方法

次にRemoveメソッドを使って要素を削除する方法についてサンプルコードで確認していきましょう。

実行結果:
dictionary_remove

このサンプルコードでは、Removeメソッドを使って対象のキーを指定してDictionaryオブジェクトの要素を削除しています。

Existsで存在するか確認する方法

先ほどのサンプルコードでは、Dictionaryオブジェクトの要素を削除する際に要素が存在するか確認せずに削除しました。

もし要素がない場合に削除すると「アプリケーション定義またはオブジェクト定義」のエラーが発生します。

エラーが発生しないようにするために、要素が存在するか確認して削除することをオススメします。

要素が存在するか確認するにはExistsメソッドを使用します。

サンプルコードで確認していきましょう。

実行結果:
dictionary_remove

このサンプルコードでは、DictionaryオブジェクトmyDicからExistsメソッドを呼び出しています。

要素が存在するか確認したあとで、Removeメソッドを使って要素を削除しています。

Dictionaryのkeyでソートする方法

Dictionaryオブジェクトはソートするメソッドを実装していないので、記述作成する必要があります。

キーの値が数値の場合は、バブルソートやクイックソートなどで記述することもできますが、文字列の場合はStrComp関数を使って比較するなど複雑になってきて記述にも時間がかかります。

そこでオススメするのが、RangeオブジェクトのSortメソッドを使用する方法です。

エクセルシート上のソートを利用します。

それではサンプルコードで確認していきましょう。

実行結果:
dictionary_sort_sheet
dictionary_sort_info

このサンプルコードではまず、VBAで作成したDictionaryオブジェクトの要素をエクセルシートのセルに入力しています。次に、RangeオブジェクトSortメソッドを使用してエクセルシート上でDictionaryオブジェクトのキーをソートしています。

エクセルシートの実行結果を確認するとA列の値でB列もセットでソートされていることがわかります。

エクセルシート上のソートの結果を、元のDictionaryオブジェクトの要素に格納して出力表示しています。

Dictionaryオブジェクトを参照設定で使う方法

Dicotnaryオブジェクトは参照設定を行い、「New」句を使って作成することもできます。

参照設定を行う方法は下記のとおりです。

  • Microsoft Visual Basic for Applicationsの「ツール」メニューから「参照設定」をクリックします。
  • 「参照可能なライブラリファイル」から「Microsoft Scripting Runtime」にチェックします。
  • OKボタンをクリックし、「参照設定」ダイアログを閉じます。

「New」句を使った宣言は下記のとおりです。

それではサンプルコードで確認していきましょう。

実行結果:
dictionary_ini

このサンプルコードでは、DictionaryオブジェクトmyDicを「New」句を使って宣言しています。

まとめ

ここではDictionaryオブジェクト(連想配列)について説明しました。

連想配列は、キーとデータをセットで扱うことができるので便利です。

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説