Another variation
Option Explicit
Sub Treat()
Dim IdZipDic As Object
Set IdZipDic = CreateObject("Scripting.Dictionary")
Dim IdNbDic As Object
Set IdNbDic = CreateObject("Scripting.Dictionary")
Dim WkArr
Dim i As Long
Const OWsName As String = "Sheet1"
Const RWsName As String = "Result"
Dim AAA, BBB
With Sheets(OWsName)
WkArr = Range(.Cells(2, 1), .Cells(Rows.Count, 2).End(3))
End With
With IdZipDic
For i = 1 To UBound(WkArr, 1)
If (.exists(WkArr(i, 1))) Then
.Item(WkArr(i, 1)) = .Item(WkArr(i, 1)) & "," & WkArr(i, 2)
IdNbDic.Item(WkArr(i, 1)) = IdNbDic.Item(WkArr(i, 1)) + 1
Else
.Item(WkArr(i, 1)) = "'" & WkArr(i, 2)
IdNbDic.Item(WkArr(i, 1)) = 1
End If
Next i
On Error Resume Next: Application.DisplayAlerts = False
Sheets(RWsName).Delete
Sheets.Add.Name = "Result"
On Error GoTo 0: Application.DisplayAlerts = True
Sheets(RWsName).Cells(1, 1).Resize(1, 3) = Array("ID", "Result", "count zipcode")
Sheets(RWsName).Cells(2, 1).Resize(.Count, 1) = Application.Transpose(.keys)
Sheets(RWsName).Cells(2, 2).Resize(.Count, 1) = Application.Transpose(.items)
Sheets(RWsName).Cells(2, 3).Resize(.Count, 1) = Application.Transpose(IdNbDic.items)
End With
MsgBox ("Job Done")
End Sub
b
Bookmarks