VBA Dictionaryの使い方(連想配列)

目次

Dictionaryとは

    • 1つの変数で複数の「キー」と「値」を保持できます。
    • キーは任意の文字列を使うことができます。連想配列です。
    • Excel、Accessとも同じです。

 

Dictionaryにキーと値を追加して表示する(Add)

追加:ディクショナリ.Add キー,値
参照:ディクショナリ(キー)
Sub test1()

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

    color.Add "a", "red"
    color.Add "b", "yellow"
    color.Add "c", "blue"
    
    Debug.Print color("a") 'red
    Debug.Print color("b") 'yellow
    Debug.Print color("c") 'blue

End Sub

6~8行目は、dictionaryにキーと値を追加しています。
10~12行目は、キーを指定して値を表示しています。

 

キーと値をすべて取得する(for文)

For Each文:For Each キー In ディクショナリ
For文:For i = 0 To ディクショナリ.Count - 1
全てのキーを取得:変数 = ディクショナリ.keys
全ての値を取得:変数 = ディクショナリ.items

keysメソッドは、Dictionaryのすべてのキーの配列を返します。
Itemsメソッドは、Dictionaryのすべての値の配列を返します。

Sub test1()
    Dim color As Object
    Set color = CreateObject("Scripting.Dictionary")

    color.Add "a", "red"
    color.Add "b", "yellow"
    color.Add "c", "blue"

    Dim c1 As Variant
    
    For Each c1 In color
        Debug.Print c1 'a b c (キー)
        Debug.Print color(c1) 'red yellow blue (値)
    Next

    Dim i As Integer
    Dim key As Variant
    Dim item As Variant
    
    key = color.keys 'keysメソッド
    item = color.items 'Itemsメソッド
    
    For i = 0 To color.Count - 1
        Debug.Print key(i) & "です" 'aです bです cです
        Debug.Print item(i) & "です" 'redです yellowです blueです
    Next
End Sub

11行目は、For Each文でループさせています。
変数のc1は、キーになります。
23行目は、for文で件数分ループさせています。
20,21行目のように予めキーと値を取得しておきます。

 

件数を取得する(Count)

ディクショナリ.Count
Sub test1()

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

    color.Add "a", "red"
    color.Add "b", "yellow"
    color.Add "c", "blue"

    Debug.Print color.Count '3

End Sub

10行目は、countでdictionaryの要素の件数を取得しています。

 

指定のキーがあるか真偽値を返す(Exists)

ディクショナリ.Exists(キー)
Sub test1()

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

    color.Add "a", "red"
    color.Add "b", "yellow"
    color.Add "c", "blue"

    If color.Exists("b") = True Then
        Debug.Print "存在します"
    End If

End Sub

10行目は、Dictionaryに指定のキーが存在するか確認しています。

 

キーを指定して値を変更する

ディクショナリ(キー) = 値
ディクショナリ.item(キー) = 値
Sub test1()

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

    color.Add "a", "red"
    color.Add "b", "yellow"
    color.Add "c", "blue"

    color("b") = "orange"
    Debug.Print color("b") 'orange

    color.item("c") = "green"
    Debug.Print color("c") 'green
End Sub

10,13行目は、キーを指定して値を変更しています。

 

キーを指定して削除する(Remove)

ディクショナリ.Remove(キー)
Sub test1()

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

    color.Add "a", "red"
    color.Add "b", "yellow"
    color.Add "c", "blue"

    color.Remove ("b")

    For Each c1 In color
        Debug.Print c1 & color(c1) 'ared cblue
    Next

End Sub

10行目は、Removeでキーを指定して削除しています。

以下は、MicrosoftのDictionary オブジェクトのリンクです。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/dictionary-object

関連の記事

VBA 文字列を切り出す(Left/Mid/Right)
Excel VBA 文字列を切り出す(Left/Mid/Right)

△上に戻る