Sub UniqueCount_v4()
Dim d As Object
Dim a As Variant, Ky As Variant
Dim lastrw As Long, i As Long
Dim s As String
Dim wsDest As Worksheet
Const ResultWorkbook As String = "Results.xlsx" '<- Edit to suit
Const ResultWorksheet As String = "abc" '<- Edit to suit
Const ResultTopLeft As String = "K1" '<- Where you want the results
Const CritColValCol As String = "8 5" '<- Criteria column & Values column in that order. Edit to suit.
With ActiveSheet
lastrw = .Cells(.Rows.Count, CLng(Split(CritColValCol)(0))).End(xlUp).Row
a = Application.Index(.Cells, Evaluate("row(2:" & lastrw & ")"), Split(CritColValCol))
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(a)
s = "|" & a(i, 2) & "|"
If InStr(1, d(a(i, 1)), s, 1) = 0 Then d(a(i, 1)) = d(a(i, 1)) & s
Next i
ReDim a(1 To d.Count, 1 To 2)
i = 0
For Each Ky In d.Keys()
i = i + 1
a(i, 1) = Ky: a(i, 2) = UBound(Split(d(Ky), "||")) + 1
Next Ky
End With
With Workbooks(ResultWorkbook).Sheets(ResultWorksheet).Range(ResultTopLeft)
.Resize(, 2).Value = Array("Criteria", "Count")
.Offset(1).Resize(d.Count, 2).Value = a
End With
End Sub