如何在Excel中用LAMBDA+SCAN实现条件重置的累计求和?
解决Excel 365中SCAN+LAMBDA条件重置累计求和的问题
你的核心问题是原公式引用了整个B列区域,SCAN逐行迭代时无法获取当前行的单个B值判断,导致重置逻辑失效。以下是两种可行的单公式解决方案:
方案1:合并A/B列数组迭代
直接将A列和B列合并为二维数组,让SCAN同时处理每行的数值和标记:
=SCAN(0, HSTACK(A2:A6, B2:B6), LAMBDA(acc, pair, IF(INDEX(pair, 2)=0, 0, acc + INDEX(pair, 1))))
- 逻辑说明:
HSTACK(A2:A6,B2:B6)把每行的A值和B值合并为一个数组对; - Lambda函数中,
pair代表当前行的[A值,B值],INDEX(pair,2)提取当前行的B标记; - 若B标记为0,重置累计值为0;否则用累计值
acc加上当前A值。
方案2:通过OFFSET定位对应B列单元格
利用OFFSET函数获取当前A值所在行的B列单元格,无需合并数组:
=SCAN(0, A2:A6, LAMBDA(acc, x, IF(OFFSET(x, 0, 1)=0, 0, acc + x)))
- 逻辑说明:
OFFSET(x,0,1)表示当前A单元格(x)向右偏移1列的单元格(即同一行的B列值); - 同样通过判断该B值是否为0,决定重置累计或继续累加。
测试示例
假设A2:A6为[1,2,3,4,5],B2:B6为[1,1,0,1,1],两个公式都会返回结果:[1,3,0,4,9],符合“B=0时重置累计”的需求。
内容的提问来源于stack exchange,提问作者user27957254
相关产品推荐
相关产品推荐

