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
相关产品推荐
相关产品推荐

