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

田中 宏明さんの投稿

(投稿ID: 4823)  添付ファイルのダウンロード権限がありません

懲りずに連想配列に違うオブジェクトを入れてみました。

可変長コレクションの一種で SortedList というもので、自動で昇順にソートされる連想配列です。(VBA標準外で、.NET Framework がインストールされている必要があります。)

シート上で並び替えできないデータを扱う実例があり、この方法を用いました。
Sub mondai5_Sorted()

    '初期化
    Dim cMx As Long
    cMx = Range("O" & Rows.Count).End(xlUp).Row
    If cMx > 1 Then
        Range("J2:O" & cMx).ClearContents
    End If
    
    Dim cFm As Long
    Dim dic As New Scripting.Dictionary
    
    Dim st As String
    For cFm = 2 To Range("A" & Rows.Count).End(xlUp).Row
        st = Range("C" & cFm).Value
        If Not dic.Exists(st) Then
            '★可変長コレクション SortedList を連想配列に入れる
            dic.Add st, CreateObject("System.Collections.SortedList")
        End If
        'SortedListにキーとアイテムを入れる ⇒ キーで昇順にSortされる
        dic.Item(st).Add Range("A" & cFm).Value, cFm
    Next

    Dim cNo As Long
    Dim cTo As Long
    Dim sp() As String
    cTo = 2
    For cFm = 0 To dic.Count - 1
        st = dic.Keys(cFm)
        Range("J" & cTo).Value = st & "のマンションは" & dic.Item(st).Count & "件ヒットしました!"
        cTo = cTo + 1
        With dic.Item(st)
            For cNo = 0 To .Count - 1
                Range("K" & cTo).Value = Range("F" & .GetByIndex(cNo)).Value
                Range("L" & cTo).Value = Range("D" & .GetByIndex(cNo)).Value
                Range("M" & cTo).Value = Range("E" & .GetByIndex(cNo)).Value
                sp = Split(Range("G" & .GetByIndex(cNo)).Value, "/")
                Range("N" & cTo).Value = sp(0)
                Range("O" & cTo).Value = sp(1)
                cTo = cTo + 1
            Next
        End With
        cTo = cTo + 1
    Next
End Sub

2020/08/20 04:42