You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets:如何统计单列中非零数值的最长连续出现次数(Streak)

解决Google Sheets中非零数值连续出现最长次数的问题

嘿,刚好碰到过类似的需求,给你两个在Google Sheets里能直接用的公式方案,完美适配你的场景:

方案1:简洁高效的SCAN函数法(推荐)

如果你的Google Sheets版本支持SCAN函数(现在大部分账号都已经推送这个函数了),这个方法最直观易懂:

=MAX(SCAN(0, 'Daily Count'!B2:B, LAMBDA(current, val, IF(val=0, 0, current+1))))

逻辑说明:

  • SCAN函数会逐行遍历你的B列数据,带着一个“累计值”往下走
  • 初始累计值设为0,每遇到一个非零数值,就把累计值+1;一旦碰到0,就把累计值重置为0
  • 最后用MAX取出所有累计值里的最大值,就是你要的最长连续非零次数

比如你给的例子序列:100、200、400、100、200、0、200、300、0,SCAN会生成这样的序列:1,2,3,4,5,0,1,2,0,取最大值就是5,完全符合预期。

方案2:兼容旧版本的ArrayFormula法

如果你的账号还没支持SCAN,可以用这个传统的数组公式方案:

=MAX(ArrayFormula(IF('Daily Count'!B2:B=0,0,MMULT(N(ROW('Daily Count'!B2:B)>=TRANSPOSE(ROW('Daily Count'!B2:B))),N('Daily Count'!B2:B<>0))-MMULT(N(ROW('Daily Count'!B2:B)>=TRANSPOSE(ROW('Daily Count'!B2:B))),N('Daily Count'!B2:B=0)))))

逻辑说明:

  • 先把非零值标记为1,零值标记为0
  • 用MMULT计算每个位置之前的累计非零数,再减去累计的零值数,实现遇到0就重置计数的效果
  • 最后同样用MAX取最大值

额外调整建议

如果你的B列除了0之外还有空白单元格,且空白也需要中断连续计数的话,只需要把公式里的判断条件改成IF(OR(val=0, val=""), 0, current+1)(对应SCAN方案),或者调整数组公式里的=0为OR(=0,="")即可。

内容的提问来源于stack exchange,提问作者KingLouie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:38:11