使用层次结构在Excel中自动编号

时间:2018-02-28 10:16:26

标签: excel excel-formula excel-2013

我想做一个自动摘要编号。我们唯一能做的就是给A(标题)编号,但字幕应该自动编号。如果title = 1,副标题1.1,低于1.1.1,依此类推。

假设标题是A,B和C是子字符。

模式应该是这样的

  

1.A

     

1.1 B

     

1.2 B

     

2.A

     

2.1 B

     

2.1.1 C

所以我尝试了这个:https://stackoverflow.com/a/32321112/7968011

What I get

What we want

What we want

1 个答案:

答案 0 :(得分:3)

如果您的级别标记在A列中为“A”/“B”/“C”,而在B列中为标题,那么您可以使用以下(复杂的)代码:

=REPT(CHAR(9), CODE(A1)-65) & SUMPRODUCT(--(A:A="A")*--(ROW(A:A)<=ROW(A1))) & "." & IF(CODE(A1)>65,SUMPRODUCT(--(A:A="B")*--(ROW(A:A)<=ROW(A1))*--(ROW(A:A)>=MAX(--ROW(A:A)*--(A:A="A")*--(ROW(A:A)<=ROW(A1))))) & ".","") & IF(CODE(A1)>66,SUMPRODUCT(--(A:A="C")*--(ROW(A:A)<=ROW(A1))*--(ROW(A:A)>=MAX(--ROW(A:A)*--(A:A="B")*--(ROW(A:A)<=ROW(A1))))) & ".","") & CHAR(9) & B1

让我们分解为步骤:

  1. 从标签开始缩进标题(0表示“A”,1表示“B”,2表示“C”):REPT(CHAR(9), CODE(A1)-65)其中Char(9)是标签。
  2. 接下来,我们要计算我们有多少“A”。我们可以使用SUMPRODUCT将其作为数组公式运行,查找值为“A”且行为&lt; =当前行:SUMPRODUCT(--(A:A="A")*--(ROW(A:A)<=ROW(A1)))的单元格。之后推了一个点,你就有了你的标题号。

  3. 接下来,IF A列在字母表中是“B”或更高版本(IF(CODE(A1)>65,因为CODE("A") = 65,CODE("B") = 66等)然后我们要计算自上次“A”以来有多少“B”。这与我们上一次查询非常相似,但我们需要ROW(A:A)>=LAST_A。但是,LAST_A是什么?好吧,我们想要MAX行,其中列A =“A”,行&lt; =当前行。所以,MAX(--ROW(A:A)*--(A:A="A")*--(ROW(A:A)<=ROW(A1)))

  4. 这会给SUMPRODUCT(--(A:A="B")*--(ROW(A:A)<=ROW(A1))*--(ROW(A:A)>=MAX(--ROW(A:A)*--(A:A="A")*--(ROW(A:A)<=ROW(A1)))))
  5. 现在,我们需要添加IF和全站,以获取

    If(Code(A1)>65,SUMPRODUCT(--(A:A="B")*--(ROW(A:A)<=ROW(A1))*--(Row(A:A)>=MAX(--ROW(A:A)*--(A:A="A")*--(ROW(A:A)<=ROW(A1))))) & ".","")
    

    对自上一个“B”以来的所有“C”重复相同的操作,然后最后添加一个Tab(CHAR(9))和B列中的值。

    (例如,如果您想要,在行的开头或数字和图块之间,只需要4个空格或6个连字符或7个点而不是标签,只需替换第一个或最后一个CHAR(9)

    {EDIT} 示例: Example of the formula for 7 rows