|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
'假设从第二层开始都是单线联系的,,,
Option Explicit
Dim result
Sub test()
Dim arr, i, j, dic, key, t, m, n, flag As Boolean
Set dic = CreateObject("scripting.dictionary")
arr = Range("a2:b" & Cells(Rows.Count, "a").End(xlUp).Row)
ReDim result(1 To UBound(arr, 1), 1 To 10 ^ 2) As String
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 1)
If arr(i, 1) = arr(j, 2) Then Exit For
Next
If j = UBound(arr, 1) + 1 Then
dic(arr(i, 1)) = dic(arr(i, 1)) + 1
End If
Next
For Each key In dic.keys
For i = 1 To dic(key)
flag = True
For j = 1 To UBound(arr, 1)
If arr(j, 1) = key Then
m = m + 1: n = 1: t = arr(j, 2)
If flag Then result(m, n) = key: flag = False
arr(j, 1) = vbNullString
Call rec(arr, arr(j, 2), m, n, t)
n = n + 1: result(m, n) = t
End If
Next j, i, key
[n2].Resize(m, UBound(result, 2)) = result
End Sub
Function rec(arr, s, m, n, t)
Dim i, j, tt
For i = 1 To UBound(arr, 1)
If s = arr(i, 1) Then
n = n + 1: result(m, n) = arr(i, 1)
arr(i, 1) = vbNullString: t = arr(i, 2)
Call rec(arr, arr(i, 2), m, n, t)
End If
Next
End Function |
评分
-
1
查看全部评分
-
|