Windows 10 Pro_x64 + Excel2013_x86 VBA で 可変長配列、Type、Dictionary を使う

Windows 10 Pro_x64 + Excel2013_x86 VBA で 可変長配列、Type、Dictionaryを使う

 

自分の中では、可変長配列、Type、Dictionary はセットで使うことが多い気が

しているので、まとめてメモっておく

・ReDim typArry(3):可変長配列のサイズを4と定義する

 ※添え字の最小値は0、最大値は3、内容は未定義

・ReDim typArry(3)

 ReDim Preserve typArry(4):

※typArry(3)までの値は保持

※typArry(4)の内容は未定義

・Dictionary.Exists(Key):Keyが存在するかをチェックする

・Dictionary.Add Key, Value:Key, Valueのペアを登録する

・Variant = Dictionary.Keys:Keyの配列を取得する

・Dictionary.Item(Key):Keyに対応するValueを取得する

Option Explicit

Private Type typDemo
    Code    As String
    Name    As String
End Type

Private Sub UserForm_Initialize()

    Dim typArry()   As typDemo
    Dim varkeys     As Variant
    Dim keys        As Variant
    Dim intCnt      As Integer
    '
    '   配列の添え字は 0~3
    '
    ReDim Preserve typArry(3)
    Dim dict As New Dictionary
    Dim dcnt As New Dictionary
    '
    '   使用データ
    '
    typArry(0).Code = "01"
    typArry(0).Name = "北海道"
    typArry(1).Code = "02"
    typArry(1).Name = "青森県"
    typArry(2).Code = "03"
    typArry(2).Name = "岩手県"
    typArry(3).Code = "01"
    typArry(3).Name = "北海道"
    '
    '   LBound 関数は配列の最小インデックス
    '   UBound 関数は配列の最大インデックス
    '
    For intCnt = LBound(typArry) To UBound(typArry)
        If dict.Exists(typArry(intCnt).Code) Then
            '
            '   Dictionary に Key が登録済
            '
            Debug.Print "dict.Exists: ", _
                        intCnt, _
                        typArry(intCnt).Code, _
                        typArry(intCnt).Name
            '
            '   出現数のカウントアップ
            '
            dcnt.Item(typArry(intCnt).Code) = dcnt.Item(typArry(intCnt).Code) + 1
        Else
            '
            '   Dictionary に Key, Value のペアを追加
            '
            dict.Add typArry(intCnt).Code, typArry(intCnt).Name
            '
            '   出現数のカウント:初期値
            '
            dcnt.Add typArry(intCnt).Code, 1
        End If
    Next
    '
    'Dictionary に登録された項目数
    '
Debug.Print dict.count
    '
    '   登録されたkeyをVariantのリストとして取得する
    '
    varkeys = dict.keys
    '
    '   Dictionary より Key, Value のペアを取得する
    '
    For Each keys In varkeys
        Debug.Print keys, dict.Item(keys), dcnt.Item(keys)
    Next
'
End Sub