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
相关产品推荐
相关产品推荐

