Maybe :
Option Explicit
Sub Test()
Dim a, b, i As Long, j As Long, p As Long, s As String, z1 As New Collection, z2 As New Collection
With Sheets("Sheet2")
a = .Range("A1").CurrentRegion.Value
ReDim b(1 To .Rows.Count, 1 To 1)
For i = 3 To UBound(a, 1)
On Error Resume Next
z1.Add Key:=a(i, 1), Item:=New Collection
z1(a(i, 1)).Add a(i, 2)
On Error GoTo 0
Next i
For i = 3 To UBound(a, 1)
s = a(i, 1) & "|" & a(i, 2)
Rec s, z1, z2
For j = 1 To z2.Count
p = p + 1
If j = 1 Then
b(p, 1) = s & "|" & z2(j)
Else
b(p, 1) = "||" & z2(j)
End If
Next j
Set z2 = Nothing
Next i
With .Range("M15").Resize(p)
.Value = b
.TextToColumns DataType:=xlDelimited, other:=True, otherchar:="|"
.CurrentRegion.Borders.Weight = xlThin
End With
End With
End Sub
Private Sub Rec(ByVal s As String, ByRef z1 As Collection, ByRef z2 As Collection)
Dim v1, v2
v1 = Split(s, "|")
v1 = v1(UBound(v1))
On Error Resume Next
Set v1 = z1(v1)
On Error GoTo 0
If TypeName(v1) = "Collection" Then
For Each v2 In v1
Rec s & "|" & v2, z1, z2
Next v2
Else
z2.Add s
End If
End Sub
Bookmarks