【EXCEL VBA】Dictionaryの高速化について知りたい

今回はDictionaryの高速化方法についてまとめました。Dictionaryは非常に便利なのですが、使い方を誤ると全く性能がでなくなります。違いについてはサンプルプログラムで確認ください。

サンプルプログラム

Dictionary参照の方法としては、Keys、Items、Item、For Eachなどがあります。今回は、サンプルプログラムにある3パタンの参照方法で時間を測定してみました。

一番早かったのはFor Eachを使った場合でした。ただFor Eachを使う場面はあまりないかな・・・・。となるとItemsとItemの違いが重要となりますが、断然Itemの方が早いです。一文字違いですが結果が倍近く違います(Dicitonaryの大きさを変えると指数的に処理時間が増えていくと思われるので、更に大きな差となっていくと思われます)

Sub sample()
    Dim dic As New Dictionary
    Dim i As Long, k, v As Long
    Dim startTime, endTime
    
    For i = 0 To 10000
        dic.Add i, i + 1
    Next
    
    ' Keys,Items
    startTime = Timer
    For i = 0 To dic.Count - 1
        k = dic.Keys(i)
        v = dic.Items(k) 
    Next
    endTime = Timer
    Debug.Print "Keys,Items", (endTime - startTime)
    
    ' Keys,Item
    startTime = Timer
    For i = 0 To dic.Count - 1
        k = dic.Keys(i)
        v = dic.Item(k)
    Next
    endTime = Timer
    Debug.Print "Keys,Item", (endTime - startTime)
    
    ' For Each
    startTime = Timer
    For Each Key In dic
        k = Key
        v = dic.Item(Key)
    Next
    endTime = Timer
    Debug.Print "For Each", (endTime - startTime)
   
End Sub

出力結果

Keys,Items     2.664063 
Keys,Item      1.3125 
For Each       0.015625