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

Google Sheets多条件求和:汇总指定类别账户的正金额

问题:Google Sheets 汇总指定分类账户的正金额

需求说明

  • 两个工作表:Konti(查找表,含命名范围konti对应账户编号、kontiCategories对应账户类别)、Postering(交易条目表,包含账户编号、金额等字段)
  • 需汇总Postering表中,账户编号属于Konti表内kontiCategories为**"Variable omkostninger"**的所有账户的正金额,预期结果为100000

已尝试方法及问题

  • 用FILTER可获取目标账户:=FILTER(konti; kontiCategories="Variable omkostninger")
  • SUM+ARRAYFORMULA+SUMIF能汇总目标账户的所有金额,但无法筛选正金额:
    =SUM(ARRAYFORMULA(SUMIF(accountNumbers; FILTER(konti; kontiCategories="Variable omkostninger"); amounts)))
    
  • SUMIFS不支持数组作为单个条件,返回结果不符合预期(仅得到50000):
    =SUMIFS(amounts; accountNumbers; ARRAYFORMULA(FILTER(konti; kontiCategories="Variable omkostninger")); amounts; ">0")
    =SUMIFS(amounts; accountNumbers; {5808;5809}; amounts; ">0")
    
  • QUERY需硬编码账户编号,无法直接复用筛选结果:
    =QUERY(Postering!B1:I30; "select * where D = 5808 or D = 5809"; 1)
    
  • MAP+LAMBDA仅能获取第一个目标账户的正金额:
    =MAP (accountNumbers;
          amounts;
          LAMBDA (accountNumber;
                  amount;
                  IF (
                    AND (accountNumber = 
                         FILTER (konti;
                                 kontiCategories="Variable omkostninger");
                         amount > 0);
                    amount;
                    0)))
    
  • 曾用复杂QUERY实现,但不够简洁:
    =QUERY (
      Postering!B1:I30;
      "select * where " &
        JOIN(" or ";
          SPLIT (
            CONCATENATE (
              MAP (
                FILTER(konti;
                       Konti!C2:C15="Variable omkostninger");
                LAMBDA (account;
                        "D=" & account & ",")
              ));
            ",")
         );
      1)
    

简洁解决方案

方法1:SUM+FILTER组合

通过FILTER同时满足「账户在目标列表中」「金额为正」两个条件,再求和:

=SUM(FILTER(Postering!E:E;
            COUNTIF(FILTER(Konti!B:B; Konti!C:C="Variable omkostninger"); Postering!D:D);
            Postering!E:E>0))

原理:用COUNTIF判断当前账户是否属于目标分类的账户列表,筛选出符合条件的正金额后求和。

方法2:SUMPRODUCT数组运算

利用数组逻辑实现多条件筛选求和:

=SUMPRODUCT(Postering!E:E*(Postering!E:E>0)*ISNUMBER(MATCH(Postering!D:D; FILTER(Konti!B:B; Konti!C:C="Variable omkostninger"); 0)))

原理:MATCH判断账户是否在目标列表中,ISNUMBER将匹配结果转为布尔值,再和正金额条件相乘,最后对符合条件的金额求和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:38:11