FILTER函数详解
WPS寻令官 | WPS产品体验官
社区中有很多关于FILTER函数的教程,大多都是介绍各种参数,以及参数运算逻辑,对于新人小白来说就算学习完也只能学习到一星半点,最近在制作一个大型表的多条件判断中,对FILTER函数有了更深的了解,以下将最近这次了解进行一次更详细的介绍。
FILTER函数的计算实则是布尔值的结算,要搞清楚布尔值的计算那首先应该明白什么是布尔值。
什么是布尔值?
布尔值是一种逻辑数据类型,仅有两个取值:TRUE(真)和 FALSE(假),分别表示条件成立或不成立。
它广泛应用于逻辑判断、条件语句和函数运算中。例如,FILTER 函数的判断条件返回的就是布尔值:
=FILTER(array, include, [if_empty])这些参数的名字看着实在是头大,读也读不通顺,那就直接看举例能很快明白
如下例所示,若 C4≥60,则逻辑判断 C4>=60 返回布尔值TRUE,IF 函数输出“及格”:
=IF(C4>=60,"及格","不及格")布尔值的核心特性
布尔值在参与算术运算时,TRUE等同于 1,FALSE等同于 0。
利用该规则,可结合 SUM 函数实现条件计数,无需使用 COUNTIF,也无需使用SUMIF/SUMIFS
例如,统计成绩 ≥60 的人数:
=SUM((C4:C12>=60)*1)公式中的 *1 将布尔数组转换为数值 1 或 0,使 SUM 可以求和。若省略 *1,公式无法正确计算:
将布尔值转为0和1的技巧:
双减号
=--TRUE 结果为1
=--FALSE 结果为0*1
=TRUE*1 结果为1
=FALSE*1 结果为0+0
=TRUE+0 结果为1
=FALSE+0 结果为0布尔值在多条件公式中的三大妙用
1. 布尔值相乘:实现并列条件
多个逻辑表达式相乘(条件1)*(条件2),表示需同时满足所有条件。
仅当所有条件均为 TURE(即值为1)时,乘积为1;任一条件为 FALSE(0),结果即为0。
常见错误:未加括号导致运算优先级出错。正确写法应将各条件用括号包裹。
以 FILTER 函数为例,筛选“四季度销售下滑且销售额低于2000”的数据:
=FILTER(B55:C76,(G55:G76<F55:F76)*(G55:G76<2000))
=FILTER(筛选数组,(条件1)*(条件2))将公式拆分开来看
四季度销售下滑:=G55:G76<F55:F76
四季度<2000:=G55:G76<2000
将布尔值转为数值
FILTER函数在筛选时,便会将两组布尔值进行计算,计算结果为1的会被返回到生成的数组中
2. 布尔值相加:实现选择条件
多个逻辑表达式相加(条件1)+(条件2),表示满足任意一个条件即可。
只要有一个条件为 TRUE(1),总和大于0,在多数函数中即视为 TRUE。
例如,使用 FILTER 筛选“四季度销售下滑和销售额低于2000”的城市:
=FILTER(B55:C76,(G55:G76<F55:F76)+(G55:G76<2000))
=FILTER(筛选数组,(条件1)+(条件2))拆分公式并计算布尔值
计算结果不等于0的均在生成的数组中
3. 布尔值相减或与1比较:实现互斥条件
两条件相减(条件1)-(条件2),表示只能满足其一,不能同时满足或同时不满足。
当两者同为 TRUE 或 FALSE 时,差值为0;仅一个为 TRUE 时,结果非0,符合条件。
示例:筛选“四季度销售下滑但不包含四季度销售额小于2000”的重点关注城市:
=FILTER(B55:C76,(G55:G76<F55:F76)-(G55:G76<2000))
=FILTER(筛选数组,(条件1)-(条件2))拆分公式并计算布尔值
计算结果不等于0的均在生成的数组中
4.对于多个互斥条件,可通过判断条件之和是否等于1来实现:
=FILTER(B55:C76,(E55:E76<D55:D76)*(F55:F76<E55:E76)*(G55:G76<F55:F76))
=FILTER(筛选数组,(条件1)*(条件2)*(条件3))示例:筛选“每个季度都在下滑的城市”的重点关注城市:
拆分公式并计算布尔值
布尔值计算可使用其他函数、数组:
=FILTER(B55:C76,BYROW(D55:G76,SUM)>AVERAGE(BYROW(D55:G76,SUM)))
=FILTER(筛选数组,(条件1)>(条件2))在不列出合计辅助列的情况下,筛选出累计数大于平均数的城市
拆分公式并计算布尔值
公式看着有点复杂,但拆分为布尔值计算后,便能显得极为简单
总结:
FILTER函数的计算实则上就是对布尔值的计算,现在应该能看懂参数中各项的含义了,即时不会读这几个单词也不影响参数的书写。
=FILTER(array, include, [if_empty])array(数组,必填):要筛选的源数据区域或数组。
include(包括,必填):逻辑表达式(布尔数组),用于决定保留哪些行或列,它返回TRUE或FALSE,支持多条件
且(AND):(条件1)*(条件2),例如 (C2:C10="苹果")*(D2:D10>100)。
或(OR):(条件1)+(条件2),例如 (C2:C10="苹果")+(C2:C10="香蕉")。
[if_empty](空值,可选):如果没有符合条件的数据,函数返回的内容,默认返回#CALC!。
| ❕ | 函数第二参数include理论上没有严格的条件数量限制,只要逻辑运算组合正确,可以支持数十甚至更多个条件。通过使用乘号(*)表示“且”(AND),加号(+)表示“或”(OR)以及其他运算符号(>、<、=等),可以实现复杂的多条件筛选。 |
| ❗ | 需要注意,过多的条件会使公式变得冗长,过多条件的布尔值计算会变得极为消耗资源,建议使用逻辑运算符组合来管理复杂的筛选逻辑。 |
举例文档:
【金山文档 | WPS云文档】 FILTER函数详解
https://www.kdocs.cn/l/ccxRnlb7ZwPJ
内容比较多,建议先收藏。
WPS寻令官
WPS寻令官 | WPS产品体验官
WPS函数专家