連想配列のアイテムは複数の値を持つことができる|配列やコレクションも使用可能

お知らせ記事には広告が含まれておりますがExcelのスキルUPに繋がる様コンテンツ自体は手を抜かずに作成しております

連想配列のアイテムは複数の値を持つことができます

連想配列(Dictionary)はアイテムとキーを一対一の関係で保持することができるオブジェクトです。

基本的には1つのキーに対して1つのアイテムになりますが応用を利かせることで複数の値を持つことができます。

  1. 1つの文字列
  2. 1つの配列
  3. 1つのコレクション
EnjoyExcel
EnjoyExcel

アイテムに3つの要素を使った状態をコードで表現してみます。

関連記事

注意点(赤枠内)をご確認のうえ記事を読み進めてください。

今回紹介するコードは配列、コレクション、連想配列の知識が必要です

連想配列を使った一連の作業を紹介している記事はこちらです。

二次元配列を使った一連の作業を紹介している記事はこちらです。

コード

コードはこちらです。今回はイミディエイトウィンドウに結果を表示させる仕様にしています。

Sub 連想配列のアイテムに色々な要素を格納してみる()

'*******************************************************

'1つの文字列
Dim dic As Scripting.Dictionary
Set dic = New Scripting.Dictionary

dic.Add "愛知県", "名古屋市" 'キー:愛知県、アイテム:名古屋市

Debug.Print dic.Item("愛知県") 'キー:愛知県のアイテムを表示
Set dic = Nothing

'*******************************************************

'1つの配列
Dim station(1 To 3) As String
Set dic = New Scripting.Dictionary

station(1) = "名古屋"
station(2) = "三河安城"
station(3) = "豊橋"

dic.Add "愛知県", station 'キー:愛知県、アイテム:Station

Debug.Print dic.Item("愛知県")(2) 'キー:愛知県のアイテム番号2を表示
Set dic = Nothing

'*******************************************************

'1つのコレクション
Dim food As Collection
Set food = New Collection
Set dic = New Scripting.Dictionary

food.Add "ひつまぶし"
food.Add "みそかつ"
food.Add "台湾ラーメン"

dic.Add "名古屋めし", food 'キー:愛知県、アイテム:food

Debug.Print dic("名古屋めし")(3) 'キー:名古屋めしのアイテム番号3を表示
Set dic = Nothing

'*******************************************************

End Sub
EnjoyExcel
EnjoyExcel

コードについて質問者様から2つ質問があったので回答しておきます。

質問
Q
配列の添え字は1からで良いのか?ゼロから始めないといけないのか。
A

気になる人はゼロから始めてください。私は今回1から始めましたが特に意味は無いです。

Q
配列orコレクションはどちらを使う方が良いのか?
A

どちらを使っても良いです。理由は同じようなことができるからです。

コード実行前

VBEのイミディエイトウィンドウは空欄です。

コード実行後

VBEのイミディエイトウィンドウに値が出力されます。

イミディエイトウィンドウで結果を確認
EnjoyExcel
EnjoyExcel

ローカルウインドウを見ながらステップインでコードを実行してみましょう。

何が起きているのかが分かります。そんなに難しいことはしていませんよ。

実際連想配列のアイテムに値を入れただけですので特に変わった事はしていません。

格納した値を取り出すはローカルウインドウを見ながら作業すると非常に簡単です。以降解説をご覧ください。

解説

ポイントは3つです。

  1. 参照設定
  2. 値を用意、格納
  3. 必要な値を取り出す

1_参照設定

連想配列(Dictionary)を使う際は参照設定でライブラリを事前に選択しておくことをおすすめします。

VBEのツールタブを選択すると一番上に表示される「参照設定」をクリックしてください。

表示されたダイアログボックスの中から「Microsoft Scripting Runtime」を探してレ点を付けましょう。

1つ選択してキーボードの「m」をクリックするとmから始まるライブラリまで移動してくれますよ。

参照設定でMicrosoft Scripting Runtimeにレ点を付ける

参照設定後紹介したコードの様に連想配列として使う変数の宣言、インスタンス化を行ってください。

インスタンス化が分からない方はこちらの記事をご覧ください。

VBEに用意したコードと合わせることでDictionaryに対しても自動メンバー表示や自動クイックヒントが使えます。

自動メンバー表示

「dic.」と入力すると自動メンバー表示が働きます。使えるプロパティ、メソッドを見る事ができます。

具体的に説明するとオブジェクトブラウザーと同じものが簡易表示されます。

オブジェクトブラウザーはVBEでF2キーをクリックすることで表示させることができます。

2_値を用意、格納

キー1に対してアイテム1の時は連想配列のAddメソッドでキーとアイテムを指定することで値を格納できます。

配列とコレクションの場合は連想配列に値を格納する前に配列、コレクションとして値を格納しておく必要があります。

配列はイコールで値を格納します。コレクションはAddメソッドで値を格納します。

その後連想配列のAddメソッドの中でキーとセットでアイテムとして値が格納されるようにコードを用意します。

3_必要な値を取り出す

コード内でDebug.Printを使っているところです。

値を取り出す際はキーとアイテムの番号を指定することで必要なアイテムを取り出すことができます。

まとめ

連想配列のアイテムを用意するにあたり1つの単語、配列、コレクションを使ってコードを書いてみました。

これで連想配列のアイテムに各種値を格納できますね。良かったとも思えますがさらに疑問が湧いてきませんか?

「いつ使うのか?」です。勉強をしていた当時の私は「これいつ使うの?」と悩んでいました。

ローカルウインドウを見ながら作業しないと欲しい値が分からないなんて使い時無いのでは?と考えた次第です。

以降色々な経験を積むことでこのコードの使い道を見つけることができました。1つ具体例を挙げてみます。

いつ連想配列のアイテムにコレクションを使うのか?

名前をキーにして関連情報をまとめて表示させたい時

もう少し具体的に書くと「商品Aを選択すると全長、全幅、重量、色などの情報をまとめて取得」したい時に使えます。

次の記事では実際にコードを書いて情報を取り出してみることにします。

タイトルとURLをコピーしました