Dim d As Object
Sub test()
Dim A, i
Set d = CreateObject("scripting.dictionary")
A = Sheets(1).Range("A1").CurrentRegion
'1)录入字典
For i = 2 To UBound(A)
d(A(i, 1)) = A(i, 2)
Next i
'2)求A(i,2)被递归的次数
For i = 2 To UBound(A)
A(i, 2) = IIf(d.exists(A(i, 2)), f(A(i, 2), 1), 1)
Next i
'[AG1].Resize(i - 1, 2) = A '可选,只为看效果
'3)汇总
d.RemoveAll
For i = 2 To UBound(A)
d(A(i, 1)) = d(A(i, 1)) + 1
Next i
[AI2].Resize(d.Count) = Application.Transpose(d.keys)
[AJ2].Resize(d.Count) = Application.Transpose(d.items)
End Sub
Function f(x, s)
If d(x) <> x Then
f = f(d(x), s + 1)
Else
f = s
End If
End Function
树形3.rar
(32.67 KB, 下载次数: 16)