Google Sheets条件逐行向上减法计算的公式实现问题
解决方案
原公式背景
Martin提供的原公式:
=byrow(AF3:AF;lambda(each;if(each="";"";SUMIFS(INDIRECT("AF"&row(each)&":AF");Indirect("O"&row(each)&":O");Indirect("O"&row(each));Indirect("K"&row(each)&":K");"CHECKOUT"))))
问题分析
你尝试将公式中的SUMIFS替换为MINIFS来实现逐行向上减法,但MINIFS仅用于提取符合条件的最小值,无法完成减法运算,因此达不到预期效果。
你的核心需求:
- 条件1:匹配O列的姓名(NAME)
- 条件2:K列的值为"CHECKOUT"
- 运算逻辑:在满足上述条件的前提下,每行数值减去其下方对应行的数值(逐行向上减法)
实现公式
针对你的需求,可使用以下公式(假设结果输出在AG列,从AG3开始):
=BYROW(AF3:AF, LAMBDA(each, IF(each="", "", let( current_row, ROW(each), current_name, INDIRECT("O"¤t_row), // 获取当前姓名下,后续行中K列为CHECKOUT的第一个AF列值 next_val, XLOOKUP(TRUE, (O:O=current_name)*(K:K="CHECKOUT")*(ROW(O:O)>current_row), AF:AF, 0, 0, 1), each - next_val ) ) ))
公式解释
BYROW(AF3:AF, LAMBDA(each, ...)):遍历AF3及以下的每一行IF(each="", "", ...):空值行返回空,避免无效计算let(...):定义变量简化公式,提升可读性current_row:当前行号current_name:当前行O列的姓名next_val:使用XLOOKUP查找当前姓名下,当前行之后第一个K列为"CHECKOUT"的AF列值,找不到则返回0
each - next_val:当前行AF列值减去找到的下方对应值,得到结果
补充说明
如果需要处理同一姓名下多个CHECKOUT记录的连续减法(即每行减去下一个符合条件的行),上述公式会自动匹配后续第一个符合条件的行,实现逐行向上的连续差值计算。
内容的提问来源于stack exchange,提问作者Deby Ferdian
相关产品推荐
相关产品推荐

