更新
我看着: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交互式魔术。