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

如何在Excel中计算每行当前连续非负数的连续次数(优先无辅助列)

无辅助列解决方案(适配Excel 365/2021及以上版本)

假设待计算的数据区域为A2:E6(每行对应一组数据),在空白列(比如F列)输入以下动态数组公式,回车后自动填充所有行的结果:

=BYROW(A2:E6,LAMBDA(row,
    LET(
        neg, --(row<0),
        groups, SCAN(0, neg, LAMBDA(a,v, IF(v=1, 0, a+v))),
        last_val, INDEX(groups, COLUMNS(groups)),
        IF(last_val=0, 0, last_val+1)
    )
))

公式逻辑说明

  • BYROW遍历每一行数据,逐行计算结果
  • neg将每行中的负数转为1,非负数转为0,标记计数重置节点
  • SCAN从左到右遍历转换后的数组:遇到1(对应原数据是负数)就重置计数为0,否则累计计数,得到每个位置的连续非负数追踪值
  • INDEX(groups, COLUMNS(groups))提取每行最后一个位置的追踪值,即当前行末尾的连续非负数计数基础值
  • 最后通过IF修正:如果末尾是负数(追踪值为0)则输出0,否则加1(修正SCAN初始值导致的计数偏移)
辅助列解决方案(兼容所有Excel版本)

如果使用的是不支持动态数组的旧版Excel,可通过辅助列实现:

  1. 假设数据在A2:E2行,在F2输入公式:
    =IF(A2<0,0,1)
    
  2. 在G2输入公式并向右填充至J2(对应原数据的最后一列):
    =IF(B2<0,0,F2+1)
    
  3. 在K2输入=J2,得到该行的结果,最后将整行公式向下填充至所有数据行,K列即为每行当前连续非负数的次数。

辅助列逻辑说明

  • 第一列辅助值判断首个数据是否为非负数,是则记1,否则记0
  • 后续辅助列:若当前数据为负数则重置计数为0,否则继承左侧辅助值并加1
  • 最后一列辅助值即为该行末尾的连续非负数次数,负数结尾时结果为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:20:14