Google Sheets累计求和接近30时输出行号并重置求和
累计求和趋近30时输出行号并重置(Google Sheets)
直接在C2单元格输入以下数组公式,自动处理整列:
=ARRAYFORMULA(IF(B2:B="",,LET( group_track, SCAN(0, B2:B, LAMBDA(prev, curr, IF(prev+curr>30 AND ABS(prev+curr-30)<ABS(prev-30), 0, prev+curr))), prev_track, VSTACK(0, group_track), curr_total, group_track+B2:B, trigger, (curr_total>30)*(ABS(curr_total-30)<ABS(prev_track-30)), IF(trigger, ROW(B2:B), "") )))
工作原理
group_track通过SCAN函数追踪累计和:如果加上当前Length值后,新总和与30的差距比之前的累计值更小,就重置累计为0,否则继续累加。prev_track存储上一行的累计值,curr_total计算当前行加入后的总和。trigger判断当前行是否满足条件:总和超过30,且新总和比之前的累计值更接近30。- 满足条件时输出当前行号,其余行留空。
匹配你的示例需求
如果你的逻辑是只要累计和超过30就输出当前行号(即使之前的累计值更接近30),修改公式如下:
=ARRAYFORMULA(IF(B2:B="",,LET( group_track, SCAN(0, B2:B, LAMBDA(prev, curr, IF(prev+curr>30, 0, prev+curr))), trigger, group_track+B2:B>30, IF(trigger, ROW(B2:B), "") )))
这个版本会在累计和超过30时立刻输出当前行号,随后重置累计,完全匹配你给出的示例:行4累计到36时输出行号4,之后重新开始累计。
内容的提问来源于stack exchange,提问作者Osm
相关产品推荐
相关产品推荐

