Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3039|回复: 6

[已解决]乱序排列的内容如何建立TREEVIEW树状目录

[复制链接]
发表于 2015-10-21 10:46 | 显示全部楼层 |阅读模式
本帖最后由 蝶·舞 于 2015-10-21 12:20 编辑

快照4.jpg

如何对这两种情形应该用树状目录进行归纳


最佳答案
2015-10-21 11:41
Private Sub UserForm_Initialize()
    Dim A, d, i, j
    A = Range("e1").CurrentRegion

    With TreeView1
        .LineStyle = tvwRootLines   '设置线条样式
        .Style = 6                  '样式:直线、+/-号和文本
        With .Nodes
            .Clear
            '加入到根目录下
            .Add Key:="部门", Text:="部门"
            '第2级
            For j = 1 To UBound(A, 2)
                .Add "部门", 4, A(1, j), A(1, j)
            Next j
            '第3级
            For i = 2 To UBound(A)
                For j = 1 To UBound(A, 2)
                   If Len(A(i, j)) Then .Add A(1, j), 4, , A(i, j)
                Next j
            Next i
        End With
    End With
End Sub
TreeView的加载例6.rar (12.22 KB, 下载次数: 24)

treeview求助.zip

2.24 KB, 下载次数: 7

发表于 2015-10-21 11:20 | 显示全部楼层
难道不是用字典吗?
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Dim L(1 To 100)
  5.     ReDim brr(1 To UBound(arr), 1 To UBound(arr))
  6.     For i = 2 To UBound(arr)
  7.         x = arr(i, 1)
  8.         If Not d.exists(x) Then
  9.             n = n + 1
  10.             L(n) = L(n) + 1
  11.             brr(L(n), n) = x
  12.             d(x) = n
  13.         End If
  14.         If arr(i, 2) <> "" Then
  15.             p = d(x)
  16.             L(p) = L(p) + 1
  17.             brr(L(p), p) = arr(i, 2)
  18.         End If
  19.     Next
  20.     [e11].Resize(Application.Max(L), n) = brr
  21. End Sub
复制代码

treeview求助.rar

9.57 KB, 下载次数: 7

回复

使用道具 举报

发表于 2015-10-21 11:26 | 显示全部楼层
不好意思搞错了,请自动忽略。。。。。。
回复

使用道具 举报

发表于 2015-10-21 11:29 | 显示全部楼层
Private Sub UserForm_Initialize()
    Dim A, d, i, j, k
    A = Range("a1").CurrentRegion
    Set d = CreateObject("scripting.dictionary")

    With TreeView1
        .LineStyle = tvwRootLines   '设置线条样式
        .Style = 6                  '样式:直线、+/-号和文本
        With .Nodes
            .Clear
            .Add Key:=A(1, 1), Text:=A(1, 1)        '加入到根目录下
            For i = 2 To UBound(A)
                If Not d.exists(A(i, 1)) Then d(A(i, 1)) = "": .Add A(1, 1), 4, A(i, 1), A(i, 1)
                .Add A(i, 1), 4, , A(i, 2)
            Next
        End With
    End With
End Sub
TreeView的加载例5.rar (12.1 KB, 下载次数: 10)
回复

使用道具 举报

发表于 2015-10-21 11:41 | 显示全部楼层    本楼为最佳答案   
Private Sub UserForm_Initialize()
    Dim A, d, i, j
    A = Range("e1").CurrentRegion

    With TreeView1
        .LineStyle = tvwRootLines   '设置线条样式
        .Style = 6                  '样式:直线、+/-号和文本
        With .Nodes
            .Clear
            '加入到根目录下
            .Add Key:="部门", Text:="部门"
            '第2级
            For j = 1 To UBound(A, 2)
                .Add "部门", 4, A(1, j), A(1, j)
            Next j
            '第3级
            For i = 2 To UBound(A)
                For j = 1 To UBound(A, 2)
                   If Len(A(i, j)) Then .Add A(1, j), 4, , A(i, j)
                Next j
            Next i
        End With
    End With
End Sub
TreeView的加载例6.rar (12.22 KB, 下载次数: 24)
回复

使用道具 举报

 楼主| 发表于 2015-10-21 12:14 | 显示全部楼层
爱疯 发表于 2015-10-21 11:29
Private Sub UserForm_Initialize()
    Dim A, d, i, j, k
    A = Range("a1").CurrentRegion

多谢爱疯了,坐等第二种情况
回复

使用道具 举报

发表于 2015-10-21 12:28 来自手机 | 显示全部楼层
本帖最后由 爱疯 于 2015-10-22 10:32 编辑
蝶·舞 发表于 2015-10-21 12:14
多谢爱疯了,坐等第二种情况

4楼和5楼,分别对应两种情况。是不是看漏了?
另外,根节点显示为部门,感觉不合适,你自己再改好了。

我改好了,收入在这里:http://www.excelpx.com/thread-365620-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 14:55 , Processed in 0.510936 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表