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

如何在Calc中使用SUMIFS对含多列子字符串的数值求和?

LibreOffice Calc 多子字符串求和与月份筛选方案

一、多子字符串匹配求和

针对D2:D4中多个子字符串(salad、soup、paella)的求和需求,有两种实用方法:

方法1:SUMPRODUCT组合公式

直接遍历所有匹配条件,一次性计算总和:

=SUMPRODUCT(B$2:B$9; --(MMULT(--ISNUMBER(SEARCH(D$2:D$4; A$2:A$9)); ROW(D$2:D$4)^0)>0))
  • SEARCH(D$2:D$4; A$2:A$9):检查A列每个单元格是否包含D列任意子字符串,返回匹配位置或错误值
  • ISNUMBER():将结果转为布尔值(匹配为TRUE,不匹配为FALSE)
  • MMULT(..., ROW(D$2:D$4)^0):合并每行的多个匹配结果,只要有一个匹配就返回大于0的数值
  • --:把布尔值/数值转为1或0,最终和B列价格相乘后求和

方法2:SUM+SUMIFS数组公式

利用数组遍历D列每个子字符串,分别计算SUMIFS后汇总:

=SUM(SUMIFS(B$2:B$9; A$2:A$9; "*"&D$2:D$4&"*"))

输入完成后需按下 Ctrl+Shift+Enter 作为数组公式确认,Calc会自动遍历D2:D4的每个值,执行多次SUMIFS并累加结果。

二、结合EOMONTH与MONTHS的月份筛选

如果需要同时筛选日期月份,可将日期条件加入上述求和公式:

示例1:筛选当月数据求和

假设C列为菜品的销售日期,求和当月内包含指定子字符串的价格:

=SUMPRODUCT(B$2:B$9; --(MMULT(--ISNUMBER(SEARCH(D$2:D$4; A$2:A$9)); ROW(D$2:D$4)^0)>0); --(C$2:C$9>=EOMONTH(TODAY(); -1)+1); --(C$2:C$9<=EOMONTH(TODAY(); 0))))
  • EOMONTH(TODAY(); -1)+1:计算当月第一天
  • EOMONTH(TODAY(); 0):计算当月最后一天
  • 最后两个--(...)是日期范围的筛选条件,只有在当月内的记录才会被计入

示例2:筛选与指定日期相差N个月的数据

假设E1为基准日期,筛选与该日期相差不超过3个月的记录求和:

=SUMPRODUCT(B$2:B$9; --(MMULT(--ISNUMBER(SEARCH(D$2:D$4; A$2:A$9)); ROW(D$2:D$4)^0)>0); --(ABS(MONTHS(C$2:C$9; E1))<=3))
  • MONTHS(C$2:C$9; E1):计算C列日期与E1日期的月份差
  • ABS():取绝对值,确保前后N个月都被包含
  • <=3:可根据需求调整月份范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:12:32