Excel 中具有层次结构的自动编号

Aci*_*roP 2 excel excel-formula excel-2013

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

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

图案应该是这样的

1.A

1.1 乙

1.2 乙

2.A

2.1 乙

2.1.1 ℃

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

我得到的

我们想要什么

我们想要什么

Chr*_*dal 6

如果您的级别标记在 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
Run Code Online (Sandbox Code Playgroud)

让我们把它分解成几个步骤:

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

  3. 接下来,IFA 列是字母表中的“B”或稍后(IF(CODE(A1)>65因为CODE("A")=65、CODE("B")=66 等)然后我们要计算自上一个“A”以来有多少个“B”。这与我们上一个查询非常相似,但我们需要一个ROW(A:A)>=LAST_A. 但是,什么是LAST_A?好吧,我们想要MAX列 A = "A" 和 Row <= 当前行的行。所以,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))))) & ".","")
Run Code Online (Sandbox Code Playgroud)

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

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

{编辑} 示例: 7 行的公式示例