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

问题描述 投票:1回答:1

我想做一个自动摘要编号。我们唯一能做的就是给A(标题)编号,但字幕应该自动编号。如果标题= 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

excel excel-formula excel-2013
1个回答
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. 从Tabs开始缩进标题(0表示“A”,1表示“B”,2表示“C”):REPT(CHAR(9), CODE(A1)-65),其中Char(9)是Tab。
  2. 接下来,我们要计算我们有多少“A”。我们可以使用SUMPRODUCT将其作为数组公式运行,查找值为“A”且行为<=当前行: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 Row,其中A列=“A”,行<=当前行。所以,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)))))

现在,我们需要添加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

© www.soinside.com 2019 - 2024. All rights reserved.