【EXCEL VBA | 基礎コード】連想配列って何?

スポンサーリンク

連想配列

EXCEL VBAの基本コードを紹介しています。初心者の方が順番に読んでくだけでVBAの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!

今回は、"連想配列"について紹介します!

連想配列

まずは"連想配列"ってなんでしょう?

以前、"配列"について紹介しましたが、"連想配列"も配列と名前につくように"配列"の一種でデータの集合を扱う方法の一つです。

他の言語では"ハッシュ"とか"オブジェクト"、"辞書型"と呼ばれることもあります。

では何が違うのか、"配列"と比較して比較して説明した図が次になります。

"配列"は、小分けにされたデータの場所を「インデックス」という番号で管理していました。

"連想配列"は、小分けにされたデータの場所それぞれに名前を付けて管理します。

この名前のことを「Key(キー)」と言います。

"配列"のインデックスは数字でしたが、"連想配列"のキーは、固有の名前が付けられるため、コードで書いたときに、それが何なのか分かりやすくなる利点があります。

連想配列の宣言と代入

"連想配列"を作るには、「Dictionaryオブジェクト」というオブジェクトを使います。配列などと同じように、まずは宣言する必要がありますが、このDictionaryオブジェクトを宣言して使う方法は2つあります。

1.CreateObjectでDictionaryオブジェクトを宣言し作成する方法

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")

上のコードのように、まずはオブジェクト型の変数を宣言します。

その後、変数に代入する際に、「CreateObject("Scripting.Dictionary")」を代入するという方法です。

「CreateObject("Scripting.Dictionary")」については、ここでは詳しく解説はしませんが、まずはこういう風に書くんだ。ということだけ覚えてもらえればOKです。

2.参照設定をして、Newで作る

また、次のコードのような形でも作ることができますが、この書き方をする場合は、VBE上で「Microsoft Scripting Runtime」を「参照設定」する必要があります。

Dim dic As New Dictionary

或いは

Dim dic As Dictionary
Set dic = New Dictionary 

参照設定の方法

1.VBEの「ツール」メニューから「参照設定」に進みます。

参照設定で「Microsoft Scripting Runtime」を探して、左側のチェックボックスにチェックを入れて「OK」を押します。

これで、設定ができましたのでNewのコードが使えるようになります。

これも、今段階では連想配列を使うときはこういう風に書くんだなというくらいの認識で大丈夫です。

連想配列のデータの登録と呼び出し

それでは、連想配列のデータの登録の方法をみていきましょう!

Dictionaryオブジェクトを使っての連想配列はデータを次の形で登録します。

Dictionaryオブジェクト名.Add "キー", 値

Dictionaryオブジェクト名に「.」ドットでつなげて「Add」、半角スペースで「"」ダブルクォーテーションで囲った「キー」、「,」カンマでつなげて「値」です。

呼び出す場合は次のようになります。

Dictionaryオブジェクト名("キー")

Dictionaryオブジェクト名の後に「"」ダブルクォーテーションで囲った「キー」を「()」の中にいれます。

次の図のような想定で、登録と呼び出しをおこなってみましょう。

次のコードは、Dictionaryオブジェクトを作って、データを登録し、イミディエイトウィンドウにデータを表示させるコードです。

Sub test()
  '宣言
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
  '登録
    dic.Add "name", "たろう"
    dic.Add "age", 32
    dic.Add "gender", "男"
    dic.Add "birthday", "1987/1/1"
    
  '呼び出し
    Debug.Print dic("name")
    Debug.Print dic("age")
    Debug.Print dic("gender")
    Debug.Print dic("birthday")
    
End Sub

実行動画

要素の変更

登録した値を「要素」と言いますが、一度登録した後に変更することもできます。

Dictionaryオブジェクト名("キー") = 新しい値

変更したい要素を指定して、=で新しい値を代入するだけです。

次のコードを実行します。

Sub test()
  '宣言
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
  '登録
    dic.Add "name", "たろう"
    dic.Add "age", 32
    dic.Add "gender", "男"
    dic.Add "birthday", "1987/1/1"

  '要素の変更
  dic("name") = "変更したたろう" ’***ここで変更してる
    
  '呼び出し
    Debug.Print dic("name")
    Debug.Print dic("age")
    Debug.Print dic("gender")
    Debug.Print dic("birthday")
    
End Sub

実行動画

キー"name"が、「変更したたろう」に変わりました。

要素の削除

要素を削除したい場合は、Removeメソッドを使います。

Dictionaryオブジェクト名.Remove("削除したい要素のキー")

次のコードで試します。

Sub test()

    '宣言
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    '登録
    dic.Add "name", "たろう"
    dic.Add "age", 32
    dic.Add "gender", "男"
    dic.Add "birthday", "1987/1/1"

    '要素の削除
    dic.Remove ("name")  '***ここで消してる
    
    '呼び出し
    Debug.Print dic("name")
    Debug.Print dic("age")
    Debug.Print dic("gender")
    Debug.Print dic("birthday")
    
End Sub

実行動画

動画のように、削除した後は呼び出してもイミディエイトウィンドウに何も表示されません。

TypeName関数で確認すると「Empty(空)」が表示されます。

このように、Dictionaryオブジェクトで、存在しないキーを呼び出すと「Empty」になりますので注意してください。

まとめ

連想配列について説明しました。連想配列は、他にも「Collectionオブジェクト」を使っても作成できますので、またそれもいつか紹介したいと思います。Dictionaryオブジェクトは制御構文を覚えるともっと便利に使えますので追々説明していきます!今回は基礎だけ理解して頂ければ大丈夫です!