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
如果您的级别标记在 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)
让我们把它分解成几个步骤:
REPT(CHAR(9), CODE(A1)-65)其中Char(9)是制表符。接下来,我们要计算我们有多少个“A”。我们可以使用SUMPRODUCT它作为数组公式运行它,查找值为“A”且行为 <= 当前行:的单元格SUMPRODUCT(--(A:A="A")*--(ROW(A:A)<=ROW(A1)))。在那之后推一个点,你就有了你的标题号码。
接下来,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)))。
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))
| 归档时间: |
|
| 查看次数: |
3226 次 |
| 最近记录: |