如何将Google Sheets中的指定公式转换为ArrayFormula?
递推计数公式的ArrayFormula转换方案
原公式=IF(E3=E2,F2,F2+1)的逻辑是:从第3行开始,对比当前行E列值与上一行E列值,若相同则继承上一行F列的计数,不同则计数+1。要转换成支持自动适配行增减的ArrayFormula,可借助SCAN函数实现递推逻辑,具体公式如下:
=ArrayFormula( IF( ROW(E:E)<=1, "", SCAN( 1, E2:E, LAMBDA(acc, curr, IF( curr=INDEX(E:E, ROW(curr)-1), acc, acc+1 ) ) ) ) )
公式细节说明:
- 跳过表头行:
ROW(E:E)<=1判断当前行是表头(第1行)时返回空值,避免干扰 - 初始化计数:
SCAN(1, E2:E, ...)以1作为初始计数(对应原逻辑中F2的初始值),遍历E2及以下所有单元格 - 递推判断逻辑:
LAMBDA(acc, curr, ...)里,acc代表上一行的计数结果,curr是当前行的E列值,通过INDEX(E:E, ROW(curr)-1)获取上一行E列值,对比后决定是否将计数+1 - 自动适配行变化:公式会自动填充F列所有行,新增或删除行时无需手动调整公式
适配说明:
- Google Sheets直接使用上述公式即可
- Excel 365及以上版本可去掉外层
ArrayFormula,使用=SCAN(1, E2:E, LAMBDA(acc, curr, IF(curr=INDEX(E:E, ROW(curr)-1), acc, acc+1)))
内容的提问来源于stack exchange,提问作者Lemons
相关产品推荐
相关产品推荐

