如何用公式为空行分隔的数据区块生成重复计数列D
需求说明
现有表格数据以空行分隔为多个区块,每个区块起始行的C列标注SET A、SET B等标识。需新增D列,为每个区块内的所有行填充对应的连续计数(如SET A区块填1,SET B区块填2,依此类推)。已尝试VLOOKUP、QUERY、COUNTA、FLATTEN等函数未成功,目前可通过Apps Script实现,需纯公式解法。
源数据
A B C 1 mercury apple SET A 2 mars mars 3 jupiter jupiter 4 venus haha 5 saturn saturn 6 7 jill six SET B 8 earth jill 9 nine earth 10 ten nine 11 12 thirteen eleven SET C 13 fourteen nepture 14 sarah thirteen 15 sixteen fourteen 16 seventeen sarah 17 18 nineteen sixteen SET D 19 twenty seventeen 20
期望结果(D列)
A B C D 1 mercury apple SET A 1 2 mars mars 1 3 jupiter jupiter 1 4 venus haha 1 5 saturn saturn 1 6 7 jill six SET B 2 8 earth jill 2 9 nine earth 2 10 ten nine 2 11 12 thirteen eleven SET C 3 13 fourteen nepture 3 14 sarah thirteen 3 15 sixteen fourteen 3 16 seventeen sarah 3 17 18 nineteen sixteen SET D 4 19 twenty seventeen 4
纯公式解法
简洁版公式(Excel/Google Sheets通用)
在D1单元格输入公式后下拉填充:
=IF(C1="", "", COUNTIF($C$1:C1, "SET*"))
逻辑说明
逐行统计从C1到当前行中以SET开头的单元格数量,该数值即为当前区块的连续计数;若当前行C列为空,则D列留空。
数组版公式(一次性填充整列,Google Sheets适用)
=ARRAYFORMULA(IF(C:C="", "", COUNTIFS(ROW(C:C), "<="&ROW(C:C), C:C, "SET*")))
SCAN函数版解法(Excel 365/Google Sheets适用)
=ARRAYFORMULA(SCAN(0, C:C, LAMBDA(acc, curr, IF(curr="", acc, IF(LEFT(curr, 3)="SET", acc+1, acc)))))
逻辑说明
用SCAN函数维护一个累加器acc:
- 当C列当前行
curr为空时,保持累加器值不变 - 当
curr以SET开头时,累加器加1 - 其他区块内非起始行场景,保持累加器值不变
内容的提问来源于stack exchange,提问作者spcsLrg
相关产品推荐
相关产品推荐

