大家晚上好,我今天要讲的案例是求1月份产品A的销售额,这是关于多条件求和。如图所示,大家需要注意的是条件包含月份。
条件求和我们很容易想到的是sumif和sumifs函数,sumifs函数的语法是SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)
可能大家第一反应就是写下这个公式,我当初也是这样想的:=SUMIFS(D2:D25,MONTH(B2:B25),1,C2:C25,H2)
但是这个公式却是错误的,不是答案错误那种,而是这个公式输入完成不了,why?
点击编辑栏左边的fx,看上去完全没问题呀,百思不得其解,经过一番搜索和求助,最终发现了问题所在:sumif和sumifs函数,这两个函数的sum_range(求和区域)和criteria_range(条件区域)只能是引用,不能是数组、文本、数值,函数只能用结果返回是引用的函数,比如if函数(这个比较特殊)、index函数、offset函数等引用函数。而日期与时间函数、查找函数、数学函数、统计函数和除了if函数的其他逻辑函数都不可以。
方法一
最简单的方法就是添加辅助列求出日期的月份,然后再用sumifs多条件求和,公式:=SUMIFS(D:D,E:E,E2,C:C,H2)
方法二
将日期转化为数字,进行比较,公式:=SUMIFS(D:D,B:B,">=42736",B:B,"<42767",C:C,H2)
方法三
直接用日期进行比较,需要注意的是日期格式不要写错~公式:=SUMIFS(D:D,B:B,">=2017/1/1",B:B,"<2017/2/1",C:C,H2)
方法四
因为sumif条件区域只能用引用,所以我们可以拆成sum+if函数的数组公式,=SUM(IF((MONTH(B2:B25)=1)*(C2:C25=H2),D2:D25)),ctrl+shift+enter数组公式
这个方法我觉得比较实用。
方法五
万能的sumproduct函数,sumproduct函数对于参数没什么要求,除了一点,不能出现错误值,否则结果也会是#VALUE!,所以一般不引用整一列(因为一般数据都有标题)。公式:=SUMPRODUCT((MONTH(B2:B25)=1)*(C2:C25=H2)*D2:D25);
=SUMPRODUCT((MONTH(B2:B25)=1)*(C2:C25=H2),D2:D25);
=SUMPRODUCT((MONTH(B2:B25)=1),(C2:C25=H2),D2:D25),注意:这个公式结果会是0,因为前两个参数结果false/true没有转化为数值。下面三种是转化为数值的方法:
=SUMPRODUCT((MONTH(B2:B25)=1)*1,(C2:C25=H2)*1,D2:D25);=SUMPRODUCT((MONTH(B2:B25)=1)+0,(C2:C25=H2)+0,D2:D25);=SUMPRODUCT(N(MONTH(B2:B25)=1),N(C2:C25=H2),D2:D25)
最后献上一个关于筛选后的多条件求和函数:
=SUMPRODUCT(SUBTOTAL(3,OFFSET(A2,ROW(A2:A25)-2,))*(MONTH(B2:B25)=1)*(C2:C25=H2)*D2:D25)