|
本帖最后由 nstxdyd 于 2013-2-20 19:43 编辑
遇到一个心烦的问题,具体描述如下图:
郁闷。。。一天了这问题都还没搞定,是我表达有问题 ?
就是想对 父ID 和 ID 两列进行遍历,然后输出 长短不一的 遍历树。
附件是EXCEL表格。。
我做的这个详细描述2图 左边是 父子关系表,共19行关系。 右边是我根据左边19个关系做出来的表。另外用三色框 特别描述出了其中的一套关系。希望大家看得明白。
又加了一个树形结构图,希望表达更清晰些。。。
- Dim z As Object '子key,父item。用于递归时的查询
- Sub test()
- Dim f As Object '父key。只在收集叶子时的查询
- Dim A(), B(), i%, j%
- A = Range("a1").CurrentRegion.Value
- Set f = CreateObject("scripting.dictionary")
- Set z = CreateObject("scripting.dictionary")
- '建字典,收叶子
- For i = 2 To UBound(A)
- f(A(i, 1)) = A(i, 2)
- z(A(i, 2)) = A(i, 1)
- Next i
- For i = 2 To UBound(A)
- If f.exists(A(i, 2)) = False Then
- j = j + 1: ReDim Preserve B(1 To j): B(j) = A(i, 2)
- End If
- Next i
- '找出每个叶的关系
- For i = 1 To UBound(B)
- B(i) = dg(B(i))
- Next i
- Columns(5).Clear
- [f1].Resize(i - 1) = Application.Transpose(B)
- End Sub
- Function dg(yz) 'yz表示叶子,也是相对他的父亲来说的。
- If z.exists(z(yz)) Then '判断此子的父是不是子
- dg = dg(z(yz)) & " > " '父居左的关系字符串
- Else
- dg = z(yz) & " > " '到顶端了
- End If
- dg = dg & yz
- End Function
复制代码
(, 下载次数: 103)
|
-
树形结构图
-
详细描述2
-
-
递归.rar
50.74 KB, 下载次数: 167
|