我想做一个自动汇总编号。我们唯一能做的就是给 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 https://stackoverflow.com/a/32321112/7968011
我得到什么 https://i.stack.imgur.com/hJetB.png
我们想要什么 https://i.stack.imgur.com/5dk1a.png
我们想要什么 https://i.stack.imgur.com/gbH5D.png
如果您的级别标记在 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
让我们将其分解为几个步骤:
- 从制表符开始缩进标题(0 表示“A”,1 表示“B”,2 表示“C”):
REPT(CHAR(9), CODE(A1)-65)
where Char(9)
是一个选项卡。
接下来,我们要计算我们有多少个“A”。我们可以用SUMPRODUCT
将此作为数组公式运行,查找值为“A”且行 SUMPRODUCT(--(A:A="A")*--(ROW(A:A)<=ROW(A1)))。之后按一个点,你就得到了标题编号。
Next, IF
A 列是字母表中的“B”或后面的字母(IF(CODE(A1)>65
, since CODE("A")
=65, CODE("B")
=66,等等)然后我们要计算自最后一个“A”以来有多少个“B”。这与我们上一个查询非常相似,但是我们需要一个ROW(A:A)>=LAST_A
。但是,什么是LAST_A
?嗯,我们想要MAX
列 A =“A”且行 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))))) & ".","")
对自最后一个“B”以来的所有“C”重复相同的操作,然后最后添加一个制表符(CHAR(9)
) 和 B 列中的值。
(例如,如果您想要在行开头或数字与图块之间使用 4 个空格、6 个连字符或 7 个点而不是制表符,只需替换第一个或最后一个CHAR(9)
)
{EDIT} Example:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)