Sub CollateData()
Dim Dict As Object
Dim Data As Variant
Dim i As Long
'Set up the dictionary
Set Dict = CreateObject("Scripting.Dictionary")
'Read the data from cols A:B of sheet 'Criteria" into an array in memory
'This gives faster processing than going back to the worksheet to read each cell
With Sheets("Criteria")
Data = .Range("A1", .Range("B" & .Rows.Count).End(xlUp)).Value
End With
'Put all the column A values into the dictionary.
'They will only be added once and just append all the column B values with a separator
For i = 1 To UBound(Data)
Dict(Data(i, 1)) = Dict(Data(i, 1)) & Data(i, 2) & ";"
Next i
'Add the new sheet
Sheets.Add After:=Sheets(Sheets.Count)
With Sheets(Sheets.Count).Range("A1")
'Put all the dictionary Keys (col A values) and items (appended col B values) into this sheet
.Resize(Dict.Count, 2).Value = Application.Transpose(Array(Dict.Keys, Dict.Items))
'Use Text to Columns to split the appended col B values into separate columns
.CurrentRegion.Columns(2).TextToColumns DataType:=xlDelimited, Semicolon:=True
End With
End Sub