解决方案 1 - 使用组
Private Sub Workbook_Open()
With Sheet1
Dim i As Long, varLast As Long
.Cells.ClearOutline
varLast = .Cells(.Rows.Count, "A").End(xlUp).Row
.Columns("A:A").Insert Shift:=xlToRight 'helper column
For i = 1 To varLast
.Range("A" & i) = .Range("B" & i).IndentLevel
Next
Dim rngRows As Range, rngFirst As Range, rngLast As Range, rngCell As Range, rowOffset As Long
Set rngFirst = Range("A1")
Set rngLast = rngFirst.End(xlDown)
Set rngRows = Range(rngFirst, rngLast)
For Each rngCell In rngRows
rowOffset = 1
Do While rngCell.Offset(rowOffset) > rngCell And rngCell.Offset(rowOffset).Row <= rngLast.Row
rowOffset = rowOffset + 1
Loop
If rowOffset > 1 Then
Range(rngCell.Offset(1), rngCell.Offset(rowOffset - 1)).EntireRow.Group
End If
Next
.Columns("A:A").EntireColumn.Delete
End With
End Sub
解决方案 2 - 如果您不想修改工作簿数据 - 解决方法
第 1 步 - 创建 UserForm 并添加 TreeView 控件
第 2 步 - 在 UserForm 代码中添加以下代码
Private Sub UserForm_Initialize()
With Me.TreeView1
.Style = tvwTreelinesPlusMinusText
.LineStyle = tvwRootLines
End With
Call func_GroupData
End Sub
Private Sub func_GroupData()
varRows = CLng(Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row)
With Me.TreeView1.Nodes
.Clear
For i = 1 To varRows
nodeTxt = Sheet1.Range("A" & i)
nodeOrd = Sheet1.Range("A" & i).IndentLevel
nodeTxt = Trim(nodeTxt)
nodeAmt = Trim(CStr(Format(Sheet1.Range("B" & i), "###,###,###,##0.00")))
Select Case nodeOrd
Case 0 'Level 0 - Root node
nodeTxt = nodeTxt & Space(80 - Len(nodeTxt & nodeAmt)) & nodeAmt
.Add Key:="Node" & i, Text:=Trim(nodeTxt)
nodePar1 = "Node" & i
Case 1 'Level 1 node
nodeTxt = nodeTxt & Space(80 - Len(nodeTxt & nodeAmt)) & nodeAmt
.Add Relative:=nodePar1, Relationship:=tvwChild, Key:="Node" & i, Text:=Trim(nodeTxt)
nodePar2 = "Node" & i
Case 2 'Level 2 node
nodeTxt = nodeTxt & Space(80 - Len(nodeTxt & nodeAmt)) & nodeAmt
.Add Relative:=nodePar2, Relationship:=tvwChild, Key:="Node" & i, Text:=Trim(nodeTxt)
nodePar3 = "Node" & i
End Select
Next
End With
End Sub
第 3 步 - 在ThisWorkbook 中添加以下代码以显示树视图
Private Sub Workbook_Open()
UserForm1.Show vbModeless
End Sub
结果