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
田中 宏明さんの投稿
(投稿ID: 4823) 添付ファイルのダウンロード権限がありません
可変長コレクションの一種で SortedList というもので、自動で昇順にソートされる連想配列です。(VBA標準外で、.NET Framework がインストールされている必要があります。)
シート上で並び替えできないデータを扱う実例があり、この方法を用いました。
小川 慶一さんのコメント
(コメントID: 6761)
ご紹介ありがとうございます。
> 可変長コレクションの一種で SortedList というもので、自動で昇順にソートされる連想配列です。(VBA標準外で、.NET Framework がインストールされている必要があります。)
「とはいえ、たいていの場合は使える」という記述もネットで見かけました。
どんな手法でもそうですが、一長一短です。
それにしても、いろいろ技があるものですね。