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

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"&current_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
    )
  )
))

公式解释

  1. BYROW(AF3:AF, LAMBDA(each, ...)):遍历AF3及以下的每一行
  2. IF(each="", "", ...):空值行返回空,避免无效计算
  3. let(...):定义变量简化公式,提升可读性
    • current_row:当前行号
    • current_name:当前行O列的姓名
    • next_val:使用XLOOKUP查找当前姓名下,当前行之后第一个K列为"CHECKOUT"的AF列值,找不到则返回0
  4. each - next_val:当前行AF列值减去找到的下方对应值,得到结果

补充说明

如果需要处理同一姓名下多个CHECKOUT记录的连续减法(即每行减去下一个符合条件的行),上述公式会自动匹配后续第一个符合条件的行,实现逐行向上的连续差值计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:35:19