投稿/コメントを表示します。

小川先生
いつもお世話になっています。

KeysメソッドとItemメソッドも配列を返すのに、変数で宣言するのがしっくりきていません。
配列を返すのなら配列を宣言するのでは?と思い、試しにやってみたらうまく動いたのですが、動いたら動いたでredimしてないのに?とか
配列の型は?とかいろいろ疑問が出てきました。

連想配列は通常の配列とは違うから・・・という風に思っておけばいいのでしょうか?
Sub test()
    Dim dic As Scripting.Dictionary
    Set dic = CreateObject("Scripting.Dictionary")
    
    Dim c As Long
    Dim cMx As Long
    Dim st As String
    cMx = Range("A" & Rows.Count).End(xlUp).Row
    
    For c = 1 To cMx
        st = Range("A" & c).Value
        If dic.Exists(st) Then
            dic.Item(st) = dic.Item(st) + 1
        Else
            dic.Add (st), 1
        End If
    Next
    
    '★疑問1 vKeysとvItmsを動的配列で宣言しても同じ結果になった
    '★疑問2 配列のサイズがわからなかったのでredimしていないがエラーが出なかった
    '★疑問3 vKeysの型をstring,vItmsの型をlongにしたら『型が一致しません』エラーになる
    Dim vKeys() As Variant
    Dim vItms() As Variant
    
    vKeys() = dic.Keys
    vItms() = dic.Items
    
    For c = LBound(vKeys) To UBound(vKeys)
        Range("C1").Offset(c).Value = vKeys(c)
        Range("D1").Offset(c).Value = vItms(c)
    Next
End Sub

2018/08/03 03:07