つらつら Excel VBA

私の備忘録です。

CollectionとDictionary

Collectionのキーは大文字小文字関係なし、TestとTESTが同じ扱い。
Dictionaryのキーは完全一致。TestとTESTは別物扱い。
以下、ざっくりとした使い方の違い。

Sub DictionaryTest()
    
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    'Dictionary Add(key, item)
    With dic
        .Add "苗字", "桃"
        .Add "名前", "太郎"
        .Add "住所", "静岡"
        .Add "年齢", 20
    End With
    
    'キーの存在を確認してから削除。
    If dic.Exists("苗字") Then
        dic.Remove "苗字"
    End If
    
    'キーと要素一覧表示。
    Dim v
    For Each v In dic
        Debug.Print v & " : " & dic.Item(v)
    Next
    Debug.Print dic.Count & "個"
    
    Set dic = Nothing
    
End Sub
Sub CollectionTest()
    
    Dim col As Collection
    Set col = New Collection
    
    'Collection Add(item, key)
    With col
        .Add "桃", "苗字"
        .Add "太郎", "名前"
        .Add "静岡", "住所"
        .Add 20, "年齢"
    End With
    
    '追加した関数でキー存在確認してから削除。
    If isExists(col, "住所") Then
        col.Remove "住所"
    End If
    
    '要素一覧表示。キーは出せません。
    Dim var
    For Each var In col
        Debug.Print var
    Next
    Debug.Print col.Count & "個"
    
    Set col = Nothing
    
End Sub


'Collectionにはキー存在確認の関数が無いので追加
Function isExists(c As Collection, key As String) As Boolean
    On Error GoTo err_1
    Call c.Item(key)
    isExists = True
    Exit Function
err_1:
    isExists = False
End Function

以上。