VBAのディクショナリー(Dictionary)のループ処理

Visual Basic for Applications (VBA)

Dictionaryクラスは、参照設定でMicrosoft Scripting Runtimeを追加するか、CreateObject関数を利用する必要があります。

  • Dictionaryクラスのインデックスを使ったループ処理。Dictionaryのインデックスは0から始まります。この例は参照設定でMicrosoft Scripting Runtimeを追加している場合です。

    Sub Sample1()
        Dim map As New Dictionary, i As Long
    
        Call map.Add("A", "あいうえお")
        Call map.Add("B", "かきくけこ")
        Call map.Add("C", "さしすせそ")
        Call map.Add("D", "たちつてと")
    
        For i = 0 To map.Count - 1 Step 1
        Debug.Print "Key=" & map.Keys(i) & ", Value=" & map.Items(i)
        Next i
    
        Set map = Nothing
    End Sub

    結果

    Key=A, Value=あいうえお
    Key=B, Value=かきくけこ
    Key=C, Value=さしすせそ
    Key=D, Value=たちつてと

    Dictionaryクラスで、インデックスを元に値を取得するにはItemsメソッドを利用します。キーの値はKeysメソッドを利用します。

  • DictionaryクラスのFor~Eachでのループ処理。値を保存する変数はVariant型である必要があります。この例ではCreateObject関数を利用しました。

    Sub Sample2()
        Dim map As Object, key As Variant
        Set map = CreateObject("Scripting.Dictionary")
    
        Call map.Add("E", "なにぬねの")
        Call map.Add("F", "はひふへほ")
        Call map.Add("G", "まみむめも")
        Call map.Add("H", "やゆよ")
    
        For Each key In map
        Debug.Print "Key=" & CStr(key) & ", Value=" & map.Item(key)
        Next
    
        Set map = Nothing
    End Sub

    結果

    Key=E, Value=なにぬねの
    Key=F, Value=はひふへほ
    Key=G, Value=まみむめも
    Key=H, Value=やゆよ

    Dictionaryクラスで、キーの値を元に値を取得するにはItemプロパティを利用します。