Excel 用VBA实现树状结构的排序

Excel 用VBA实现树状结构的排序,excel,vba,Excel,Vba,我有一个具有树状结构的工作表,其中节点的级别由缩进决定,如下所示 我的目标是迭代这张表,并按照硬编码的顺序对它进行排序(例如,迈克:1,11月:2,利马:3,奥斯卡:4,探戈:5)。在我的情况下,我希望我的输出是: Mike November Lima ALL OF LIMA'S CHILDREN AND GRANDCHILDREN Oscar ALL OF OSCAR'S CHILDREN AND GRANDCHILDREN Tango 其中保留了树结构,并且还保留了与右侧

我有一个具有树状结构的工作表,其中节点的级别由缩进决定,如下所示

我的目标是迭代这张表,并按照硬编码的顺序对它进行排序(例如,迈克:1,11月:2,利马:3,奥斯卡:4,探戈:5)。在我的情况下,我希望我的输出是:

Mike
November
Lima
    ALL OF LIMA'S CHILDREN AND GRANDCHILDREN
Oscar
    ALL OF OSCAR'S CHILDREN AND GRANDCHILDREN
Tango

其中保留了树结构,并且还保留了与右侧列上每个名称相关联的值。如何在VBA中实现这一点?

这是一个非常广泛的主题。VBA没有任何内置的树型数据结构,因此您需要将数据解析为树型数据结构。然后操纵那棵树。您需要定义一个
TreeNode
类;如果
TreeNode
需要对其父节点的引用,则可能会很有用。Excel没有树。它有行和列。使用命名范围相应地组织数据,并根据这些命名范围进行排序。@MathieuGuindon如果不需要特殊的数据结构,就不可能基于缩进进行快速分析吗?它几乎只是简单地上下移动床单的某些部分。只有子树的顶部和底部才重要。解析成什么?如果需要对一棵树进行建模,则需要将其解析为一棵树。如果您试图对数据透视表进行自定义排序,那么请对数据透视表进行自定义排序;如果这些数据来自于一个表,则改为使用表外的数据;这比在不涉及树节点的情况下通过扫描行和计算它们的缩进来对这些数据进行排序要容易得多。如果要对大量数据执行的操作是将缩进级别转换为可以使用的数字,则需要VBA,特别是
{range}.IndentLevel