FILTER函数是一个超级智能筛子,FILTER+SUM多条件求和!
FILTER函数在Excel或WPS表格中是一个超级智能筛子,下面我们通过一个简单的案例理解它的强大之处。
如下图所示:
A1:D10区域是各部门员工的签单金额表,另外每一单有一个状态,提示这一单是否完成客户金额付款。
我们要做的就是:将符合曙光部且每单金额大于3000的,且排除订单已退款状态下的部门总金额统计出来。也就是要符合3个条件汇总总金额,即多条件求和。
FILTER函数的定义与功能:
FILTER函数是Excel和WPS表格工具中的一种动态数组函数,核心功能是根据指定条件从数据区域中筛选出符合条件的记录。
FILTER函数语法为:
=FILTER(数组, 条件, [无结果时的返回值])
数组:需要筛选的数据区域。
条件:逻辑表达式。
无结果时的返回值(可选):当无匹配数据时显示的内容。
第一步:增加第一个条件,筛选部门“曙光部”
输入函数公式:
=FILTER(C2:C10,A2:A10=F2)
FILTER函数筛选C2:C10区域的金额数据。那么我们筛选C2:C10区域内的哪些金额数据呢?我们这样执行筛选,当条件区域A2:A10单元格区域内的部门与F2单元格部门相同时,我们才会筛选C2:C10区域内与之对应的行数据,数组溢出返回结果:
{7300;3500;6870;2470}
第二步:增加第二个条件,在上一步基础上筛选金额大于3000的
输入函数公式:
=FILTER(C2:C10,(A2:A10=F2)*(C2:C10>3000))
在条件1(A2:A10=F2)的基础上用乘号连接条件2(C2:C10>3000),即当C2:C10区域内的金额大于3000时,再上一步的筛选基础上再次执行筛选C2:C10区域内与之对应的行数据,数组溢出返回结果:
{7300;3500;6870}
第三步:增加第三个条件,在上两步基础上筛选排除已退款状态的
我们输入函数公式:
=FILTER(C2:C10,(A2:A10=F2)*(C2:C10>3000)*(D2:D10<>"已退款"))
在条件1(A2:A10=F2)与条件2(C2:C10>3000)的基础上用乘号连接条件3(D2:D10<>"已退款"),即当D2:D10区域内标注的文字不等于“已退款”时,再在上两步的筛选基础上执行筛选C2:C10区域内与之对应的行数据,数组溢出结果:
{7300;6870}
第四步:求和
最后用SUM函数进行筛选结果求和就行了:
=SUM(FILTER(C2:C10,(A2:A10=F2)*(C2:C10>3000)*(D2:D10<>"已退款")))
由于SUM函数天然支持数组参数,无论参数是静态数组(如 {1,2,3})、单元格区域引用,还是动态数组公式生成的溢出结果,都可以进行求和。
比如今天这个例子中就是FILTER函数返回的数组溢出结果{7300;6870},SUM函数对其进行求和的。
但是SUMIF函数就无能为力了:
=SUMIF(D2:D10,"<>已退款",FILTER(C2:C10,(A2:A10=F2)*(C2:C10>3000)*(D2:D10<>"已退款")))
比如我们在前两个条件的筛选基础上,用SUMIF函数嵌套第3个条件。原则上SUMIF函数的第一参数D2:D10为第3个条件区域,第二参数增加对条件区域满足"<>已退款"的第3个条件,然后执行对FILTER筛选结果的条件求和。但是回车结束公式时提示公式错误,无法完成。
这就是因为SUMIF函数的第3个参数是实际进行求和的单元格区域或引用,它不支持直接使用数组。每次调用SUMIF函数时,第3参数求和区域只能指向一个具体的单元格区域或引用,而不能是一个数组。如果需要处理数组溢出的结果,比如本例中的FILTER函数数组溢出结果,就必须使用其他函数或方法来实现了。