将Excel树展平为3列(拼图)

时间:2019-02-19 14:36:15

标签: excel vba

更新

我看着:Convert matrix to 3-column table ('reverse pivot', 'unpivot', 'flatten', 'normalize')

很显然,这不能解决问题。请注意,此处“数据透视表”的内容不是值,就像普通的数据透视表一样,而是对树结构的引用(指针)。只有叶子节点才是内容。因此,除非进行大量修改,否则我认为该链接不会在这里解决问题。

我刚刚测试了他们的方法,但是它不起作用,因为这是一棵在表中带有嵌入式节点链接的树。


我们有一个excel工作表,它被用作3层深树(一个根,三个级别),用于对列表下拉列表进行数据验证(使用技巧:= INDIRECT(H10))。为此,我们创建了以下格式的工作表:

Root    Tier1   Tier1a  Tier1b  Tier1c  Tier2   Tier2a  etc….
Tier1   Tier1a  Tier1a0 Tier1b0 Tier1c0 Tier2a  Tier2a0 
Tier2   Tier1b  Tier1a1 Tier1b1 Tier1c1 Tier2b  Tier2a1 
Tier3   Tier1c  Tier1a2 Tier1b2 Tier1c2 Tier2c      
                        Tier1b3 Tier1c3         
                                Tier1c4 

我们需要将其变成一个展平为3列的表。格式:

Tier1   Tier1a  Tier1a0
Tier1   Tier1a  Tier1a1
Tier1   Tier1a  Tier1a2
Tier1   Tier1b  Tier1b0
Tier1   Tier1b  Tier1b1
Tier1   Tier1b  Tier1b2
Tier1   Tier1b  Tier1b3
Tier1   Tier1c  Tier1c0
Tier1   Tier1c  Tier1c1
Tier1   Tier1c  Tier1c2
Tier1   Tier1c  Tier1c3
Tier1   Tier1c  Tier1c4
Tier2   Tier2a  Tier2a0
Tier2   Tier2a  Tier2a1
etc.    etc.    etc.

如何才能以最少的努力做到这一点。即我可能可以从头开始编写一个VBA宏,该宏对树进行预遍历(递归)并为每个节点抽出三元组。但是,由于这是一次性操作,所以我不在乎它是可重用的VBA还是某些excel交互式魔术。

0 个答案:

没有答案