使用公式中的多个函数在Excel中创建层次结构序列

时间:2014-12-30 15:35:52

标签: excel excel-formula

我需要能够在行中创建层次结构,以将任务与子任务和子子任务分开。基本上任务是1级,子任务是2级子任务是3级,子子任务是4级。

enter image description here

因此,单元格A1应该包含一个公式,当复制到单元格G1时,应该删除单元格F1的值,然后+1,以便单元格G1的值将变为2。 单元格B1应包含公式,该公式将获取单元格A1的值并添加.1以使值变为1.1,如果进一步向下复制,则会将值增加.1,以便下一个单元格为1.21.3等等。 3级和4级的其余步骤应该与2级的公式几乎相似。

我试图在没有VBA的情况下执行此操作,只是简单的公式可以作为模板行放在我的电子表格中,并且可以在需要时复制到电子表格的任何位置。

2 个答案:

答案 0 :(得分:4)

好的,首先查看这篇文章here,您应该能够找到创建所需内容所需的一切。 现在,这里是您示例中每个级别的所有公式

等级1

=IF(ISERROR(VALUE(SUBSTITUTE(OFFSET(A1,-1,0,1,1),".",""))),1,IF(ISERROR(FIND("@",SUBSTITUTE(OFFSET(A1,-1,0,1,1),".","@",1))),VALUE(OFFSET(A10,-1,0,1,1))+1,VALUE(LEFT(OFFSET(A1,-1,0,1,1),FIND("@",SUBSTITUTE(OFFSET(A1,-1,0,1,1),".","@",1))-1))+1))

等级2

=IF(ISERROR(VALUE(SUBSTITUTE(OFFSET(A2,-1,0,1,1),".",""))),"0.1",IF(ISERROR(FIND("@",SUBSTITUTE(OFFSET(A2,-1,0,1,1),".","@",1))),OFFSET(A2,-1,0,1,1)&".1",LEFT(OFFSET(A2,-1,0,1,1),FIND("@",SUBSTITUTE(OFFSET(A2,-1,0,1,1),".","@",1)))&IF(ISERROR(FIND("@",SUBSTITUTE(OFFSET(A2,-1,0,1,1),".","@",2))),VALUE(RIGHT(OFFSET(A2,-1,0,1,1),LEN(OFFSET(A2,-1,0,1,1))-FIND("@",SUBSTITUTE(OFFSET(A2,-1,0,1,1),".","@",1))))+1,VALUE(MID(OFFSET(A2,-1,0,1,1),FIND("@",SUBSTITUTE(OFFSET(A2,-1,0,1,1),".","@",1))+1,(FIND("@",SUBSTITUTE(OFFSET(A2,-1,0,1,1),".","@",2))-FIND("@",SUBSTITUTE(OFFSET(A2,-1,0,1,1),".","@",1))-1)))+1)))

等级3

=IF(ISERROR(VALUE(SUBSTITUTE(OFFSET(A3,-1,0,1,1),".",""))),"0.0.1",IF(ISERROR(FIND("`",SUBSTITUTE(OFFSET(A3,-1,0,1,1),".","`",2))),OFFSET(A3,-1,0,1,1)&".1",LEFT(OFFSET(A3,-1,0,1,1),FIND("`",SUBSTITUTE(OFFSET(A3,-1,0,1,1),".","`",2)))&IF(ISERROR(FIND("`",SUBSTITUTE(OFFSET(A3,-1,0,1,1),".","`",3))),VALUE(RIGHT(OFFSET(A3,-1,0,1,1),LEN(OFFSET(A3,-1,0,1,1))-FIND("`",SUBSTITUTE(OFFSET(A3,-1,0,1,1),".","`",2))))+1,VALUE(MID(OFFSET(A3,-1,0,1,1),FIND("`",SUBSTITUTE(OFFSET(A3,-1,0,1,1),".","`",2))+1,(FIND("`",SUBSTITUTE(OFFSET(A3,-1,0,1,1),".","`",3))-FIND("`",SUBSTITUTE(OFFSET(A3,-1,0,1,1),".","`",2))-1)))+1)))

等级4

=IF(ISERROR(VALUE(SUBSTITUTE(OFFSET(A4,-1,0,1,1),".",""))),"0.0.0.1",IF(ISERROR(FIND("`",SUBSTITUTE(OFFSET(A4,-1,0,1,1),".","`",3))),OFFSET(A4,-1,0,1,1)&".1",LEFT(OFFSET(A4,-1,0,1,1),FIND("`",SUBSTITUTE(OFFSET(A4,-1,0,1,1),".","`",3)))&IF(ISERROR(FIND("`",SUBSTITUTE(OFFSET(A4,-1,0,1,1),".","`",4))),VALUE(RIGHT(OFFSET(A4,-1,0,1,1),LEN(OFFSET(A4,-1,0,1,1))-FIND("`",SUBSTITUTE(OFFSET(A4,-1,0,1,1),".","`",3))))+1,VALUE(MID(OFFSET(A4,-1,0,1,1),FIND("`",SUBSTITUTE(OFFSET(A4,-1,0,1,1),".","`",3))+1,(FIND("`",SUBSTITUTE(OFFSET(A4,-1,0,1,1),".","`",4))-FIND("`",SUBSTITUTE(OFFSET(A4,-1,0,1,1),".","`",3))-1)))+1)))

当然可能还有其他一些方法,但这也有效。

如果您对此有疑问,请告诉我。

答案 1 :(得分:2)

我也有这个问题。我这样解决了:

  1. 我专注于点。每个点都是一个层次结构。在单元格A2处,为了找到层次结构,我使用了这个公式

    =LEN(c2)-LEN(SUBSTITUTE(c2;".";""))
    

    C列是我拥有树的地方。在此公式之后填充整个列。对于找到的每个点,它会增加/减少一个数字,因此您可以设置等级。

  2. 我已经制作了4个级别的公式,但您可以根据需要增加它:在单元格B2中设置:

    =IF(A2=4;"level4"&C2&" "&D2; IF(A2=3;"level3"&C2&" "&D2; IF(A2=2;"level2"&C2&" "&D2; IF( A2=1;"level1"&C2&" "&D2;IF(A2=0;""&C2&" "&D2)))))
    

    单元格D2是层次结构所指的名称:例如。 C2= 1.1.1 D2= Arthur

  3. 这个网页形式“吃掉”我所有的空间,所以我用level4,level3,level2,level1,level0替换它们。要实现树样式,请替换每个级别0,1,2,3,4,5个空格乘以级别数。

    在此之后,填充整个列。我使用了空格,因此它可以清楚地显示层次结构。

    它对我有用。希望它对你有用。