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

Google Sheets按K、O列多条件实现AF列向上逐行累计求和

解决方案:Google Sheets 多条件下AF列向上逐行累计求和

需求回顾

实现AF列的向上逐行累计求和(每行累加下方符合K列、O列条件的AF数值,呈阶梯式递增),同时筛选掉O列为0的行。

问题分析

你原公式的核心问题:

  • 仅针对O列每组的首行计算整组总和,未实现逐行累计下方数值的逻辑
  • 未加入K列的多条件筛选
  • 输出结果仅保留每组首行,不符合逐行阶梯式递增的需求

正确公式方案

方案1:BYROW + SUMIFS(直观易读)

在目标列(如AG3)输入以下数组公式,会自动填充所有符合条件的行:

=BYROW(3:1000, LAMBDA(r,
  LET(
    k_val, INDIRECT("K"&r),
    o_val, INDIRECT("O"&r),
    IF(OR(k_val="", o_val="0"), "",
      SUMIFS(AF:AF, K:K, k_val, O:O, o_val, ROW(AF:AF), ">="&r)
    )
  )
))
  • 逻辑说明:
    1. 用BYROW遍历第3行到第1000行(可根据实际数据范围调整)
    2. LET函数简化变量引用,分别获取当前行的K、O列值
    3. 过滤K列空值、O列为0的行,返回空值
    4. SUMIFS计算当前行及下方所有同K、同O值的AF列总和,实现从上到下的阶梯式递减;若需仅累加下方不含自身,将">="&r改为">"&r即可

方案2:SCAN + 分组排序(大数据量更高效)

如果表格数据量较大,可通过分组倒序累计再恢复原顺序提升性能:

=LET(
  data, FILTER(3:1000, K3:K<>"", O3:O<>"0"),
  sorted, SORT(data, 11, TRUE, 15, TRUE, ROW(data), FALSE),
  groups, BYROW(sorted, LAMBDA(r, TEXTJOIN("|", TRUE, INDEX(r,11), INDEX(r,15)))),
  cumulative, SCAN(0, sorted, LAMBDA(a, r, IF(groups=INDEX(groups,ROW(r)-ROW(sorted)+1), a+INDEX(r,32), 0))),
  result, SORT(HSTACK(sorted, cumulative), ROW(sorted), TRUE),
  ARRAYFORMULA(XLOOKUP(ROW(3:1000), INDEX(result,0,1), INDEX(result,0,33), ""))
)
  • 逻辑说明:
    1. 先过滤出有效数据(K非空、O≠0)
    2. 按K、O分组后倒序排列,用SCAN实现组内从下往上的累计求和
    3. 将累计结果与原数据匹配,恢复原行顺序后返回对应值

额外调整说明

若需实现从下往上看阶梯式递增(即每行包含自身及上方同组的AF值),只需将方案1中的">="&r改为"<="&r,此时从上到下的结果会呈现递增趋势。

内容的提问来源于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 04:50:46