如何在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,可通过辅助列实现:
- 假设数据在
A2:E2行,在F2输入公式:=IF(A2<0,0,1) - 在
G2输入公式并向右填充至J2(对应原数据的最后一列):=IF(B2<0,0,F2+1) - 在
K2输入=J2,得到该行的结果,最后将整行公式向下填充至所有数据行,K列即为每行当前连续非负数的次数。
辅助列逻辑说明
- 第一列辅助值判断首个数据是否为非负数,是则记
1,否则记0 - 后续辅助列:若当前数据为负数则重置计数为
0,否则继承左侧辅助值并加1 - 最后一列辅助值即为该行末尾的连续非负数次数,负数结尾时结果为
0
内容的提问来源于stack exchange,提问作者Sammy
相关产品推荐
相关产品推荐

