Sub Test()
Dim i&, c%, x&, n&, arr, brr, d As Object
Set d = CreateObject("Scripting.Dictionary")
arr = [f1].CurrentRegion
For i = 1 To UBound(arr, 2)
If Len(arr(1, i)) Then d(arr(1, i) & "|c") = i
Next
brr = [a1].CurrentRegion
ReDim crr(1 To UBound(brr), 1 To UBound(arr, 2))
For i = 2 To UBound(brr)
c = d(brr(i, 2) & "|c")
If c > 0 Then
x = d(brr(i, 2) & "|r")
If x = 0 Then
d(brr(i, 2) & "|r") = 1: x = 1
n = IIf(n > x, n, x)
Else
d(brr(i, 2) & "|r") = d(brr(i, 2) & "|r") + 1
x = d(brr(i, 2) & "|r")
n = IIf(n > x, n, x)
End If
crr(x, c) = brr(i, 1)
End If
Next
[f2].Resize(n, UBound(crr, 2)) = crr
End Sub