如何在Google Sheets中使用ARRAYFORMULA引用同列单元格
Google Sheets 自动分类累计计数解决方案
核心公式
在目标列第2行输入以下公式,即可实现类别变化时重置计数、自动适配新增行的需求,无需手动调整范围:
=ARRAYFORMULA(IF(G2:G="",,COUNTIFS(G$2:G2, G2:G, ROW(G$2:G2), "<="&ROW(G2:G)) - 1))
公式原理
IF(G2:G="",, ...):跳过G列空白行,避免生成无效值COUNTIFS(G$2:G2, G2:G, ROW(G$2:G2), "<="&ROW(G2:G)):统计从第2行到当前行内,与当前行G列值一致的行数G$2:G2:混合引用锁定起始行,结束行随当前行动态扩展,确保只统计当前行及以上的范围- 第二个条件通过行号限制,避免跨范围统计
-1:将默认的1起始计数转为0起始,完全匹配你需要的IF(G2<>G1,0,B1+1)逻辑
方案优势
- 无循环依赖:无需引用当前公式所在列的上一行结果,彻底避免循环错误
- 自动扩展:公式引用的
G2:G会自动适配新增行,不用手动修改范围 - 性能稳定:相比迭代计算或整列引用,动态范围的COUNTIFS计算效率更高,不会拖慢表格
进阶方案(SCAN函数)
如果后续需要更复杂的累计规则,可使用新版Google Sheets支持的SCAN函数:
=ARRAYFORMULA( IF(G2:G="",, SCAN(0, G2:G, LAMBDA(acc, curr, IF(curr <> OFFSET(curr, -1, 0), 0, acc + 1) )) ) )
SCAN逐行遍历G列,acc存储上一次的计数结果OFFSET(curr, -1, 0)获取当前行的上一行G列值,对比后决定重置计数或递增- 同样支持自动扩展,无循环依赖
内容的提问来源于stack exchange,提问作者Trashman
相关产品推荐
相关产品推荐

