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的技巧:

  1. 双减号

=--TRUE 结果为1
=--FALSE 结果为0
  1. *1

=TRUE*1 结果为1
=FALSE*1 结果为0
  1. +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])
  1. array(数组,必填):要筛选的源数据区域或数组。

  1. include(包括,必填):逻辑表达式(布尔数组),用于决定保留哪些行或列,它返回TRUE或FALSE,支持多条件

  • 且(AND):(条件1)*(条件2),例如 (C2:C10="苹果")*(D2:D10>100)。

  • 或(OR):(条件1)+(条件2),例如 (C2:C10="苹果")+(C2:C10="香蕉")。

  1. [if_empty](空值,可选):如果没有符合条件的数据,函数返回的内容,默认返回#CALC!

函数第二参数include理论上没有严格的条件数量限制,只要逻辑运算组合正确,可以支持数十甚至更多个条件。通过使用乘号(*)表示“且”(AND),加号(+)表示“或”(OR)以及其他运算符号(>、<、=等),可以实现复杂的多条件筛选。

需要注意,过多的条件会使公式变得冗长,过多条件的布尔值计算会变得极为消耗资源,建议使用逻辑运算符组合来管理复杂的筛选逻辑。

举例文档:

【金山文档 | WPS云文档】 FILTER函数详解

https://www.kdocs.cn/l/ccxRnlb7ZwPJ

内容比较多,建议先收藏。

四川省
浏览 3349
1
9
分享
9 +1
4
1 +1
全部评论 4
 
十一年
什么是布尔值 ?,说了,也没说明白 ,说不明白!!!, 可以这样讲:问别人一个问题,当别人可以用 "是" 或 "不是" 来进行回复时 那么别人回复的 "是" 或 "不是" 被称为布尔值 因为布尔这个人对这样的问题有研究贡献 所以 "是" 或 "不是" 被称为 布尔值 外国人的 True 可以表示 "是" ,False 可以表示 "不是" 比如 = 3 > 2,这就是问电脑 符号的左边 大于右边 吗,电脑必须要回复 电脑应该回复 3 "是" 大于 2的 或者回复 3 "不是" 大于 2的 但是这样回复的内容,没办法进行下一步计算 所以电脑只需要回复 "是" 或 "不是",由于电脑是外国人发明的 所以电脑给出的回复,要么True 要么False
· 黑龙江省
回复
 
亂雲飛渡
亂雲飛渡

WPS寻令官

详细,学习
· 广东省
回复
 
Hypnotist
Hypnotist

WPS寻令官 | WPS产品体验官

互斥这个条件第一次见到,好评
· 四川省
回复
 
拾光漫行
拾光漫行

WPS函数专家

好详细 学习了
· 重庆
回复