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) ) ) ))
- 逻辑说明:
- 用
BYROW遍历第3行到第1000行(可根据实际数据范围调整) LET函数简化变量引用,分别获取当前行的K、O列值- 过滤K列空值、O列为0的行,返回空值
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), "")) )
- 逻辑说明:
- 先过滤出有效数据(K非空、O≠0)
- 按K、O分组后倒序排列,用
SCAN实现组内从下往上的累计求和 - 将累计结果与原数据匹配,恢复原行顺序后返回对应值
额外调整说明
若需实现从下往上看阶梯式递增(即每行包含自身及上方同组的AF值),只需将方案1中的">="&r改为"<="&r,此时从上到下的结果会呈现递增趋势。
内容的提问来源于stack exchange,提问作者Deby Ferdian
相关产品推荐
相关产品推荐

