Excel:父级子树视图:dynamic添加节点(父级)号码

我正在为一些数字资产系统开发关键字树。 基本上我必须以这种格式导入它(强制):

1,0,Top Level A 2,0,Top Level B 3,0,Top Level C 4,1,Sub Level A 5,1,Sub Level B 6,4,Deepest Level A 7,5,Deepest Level B 8,3,Sub Level from Top Level C 

在我的情况下,这是这样的(这是一个摘录,我添加了一些空格,使其更具可读性):

  1, 0, Natural and Organic Cosmetic (NOC) 2, 1, bodycare 3, 1, facecare 4, 1, babycare 5, 1, pregnancy 6, 1, lipcare 7, 1, hair 8, 1, teeth 9, 1, wellness 10, 1, mencare (specific) 11, 0, Model 12, 11, application without product 13, 11, application with product 14, 11, adult 15, 14, man 16, 14, woman 

但是这个列表需要定期维护和更新,为了简化这个过程,我创build了一个Excel文件,在这个文件中,列的高度定义如下:

  1 0 Natural and Organic Cosmetic (NOC) 2 1 bodycare 3 1 facecare 4 1 babycare 5 1 pregnancy 6 1 lipcare 7 1 hair 8 1 teeth 9 1 wellness 10 1 mencare (specific) 11 0 Model 12 11 application without product 13 11 application with product 14 11 adult 15 14 man 16 14 woman 

现在我的问题是,我想添加更多的子级项目,让我们说在“身体护理”。 因此,我不得不手动更新所有父母的身份证号码,不幸的是放弃了第一行中唯一的顺序标识符。

添加新行时,如何dynamic更新父节点ID号?

这个解决scheme只能在树的固定深度上工作。 所以,如果你想添加一个3级节点,你将不得不相应地扩展公式…

此外,只要插入新行,您就必须拖放/复制列A和B中的公式。 除非您可以使用表格(Excel 2007和更新的版本),如果公式将被自动添加,如果它们对于整个列是相同的。

好。 这个想法是检查我们在什么水平的深度,并find父级别的第一个(向上看)的条目。 不是很优雅,但它的工作原理。

在列A中,您只需使用公式=ROW()-1来获得“唯一的连续节点号”。

对于列B(父节点号),您可以使用LOOKUP像这样:

 =IF(C2<>"",0,IF(D2<>"",LOOKUP(2,1/(C$2:C2<>""),A$2:A2),IF(E2<>"",LOOKUP(2,1/(D$2:D2<>""),A$2:A2)))) 

条件(C$2:C7<>"")将返回一个如下的数组,1表示匹配,0表示不匹配:

 {0;0;1;0;0;0;1;0} 

用数组除1将得到这样一个数组:

 {#DIV/0!;#DIV/0!;1#DIV/0!;#DIV/0!;#DIV/0!;1#DIV/0!} 

如果您使用LOOKUP的查找值大于该范围内的任何值,则将返回最后一个匹配的最后一个数值。