还在手动筛选数据?试试filter这个数组函数,真香!

有些业务需要经常手动筛选指定条件数据,虽然操作上不是很繁琐,但就是小操作,很容易让你熬夜加班。

在Microsoft 365和WPS最新版中,上线了Filter这个动态筛选函数。

函数作用就是,根据指定条件,对目标数据进行筛选,将最终的筛选结果直接展现出来。

「所以好处是什么?」 如果使用filter函数,你只需要一次创建好函数模板,后期更新数据库,就能自动完成所有筛选操作。

「那么如何使用函数公式有条件的动态筛选数据?」

本期用「filter函数」「if函数」分别实现下面的筛选需求。

  1. 单条件筛选

  2. 多条件同时满足或只满足任意条件

  3. 要么同时满足某些条件,要么符合指定条件

点赞收藏,根据你的需要选择合适的方法。

1. Filter函数怎么用?

函数参数如下:

=FILTER(array,include,[if_empty])

图片来自office支持

Microsoft 365,Excel 2021以及WPS最新版支持该函数

第一个参数是待筛选的数据区域或者数组,第二个是一个一维布尔值数组,这个待会详细介绍,第三个是当没有符合条件数据时返回的值。

以这张信息表为例:

我们需要筛选提取所有性别为「男」的数据,使用公式如下:

=FILTER(A2:C8,B2:B8="男")

可以注意到,函数第二个参数使用了B2:B8="男"这样的条件式,这个条件式的结果是这样的:

符合条件的,返回结果True,不符合则是False。由此构成了一组一维的布尔值数组。

这个数组有以下几个条件:

  1. 数组必须是单行或者是单列的一维数组;

如果要筛选行,则是单列数组,筛选列则是单行数组。

  1. 数组大小必须与待筛选的数组大小保持一致。

例如待筛选数组要筛选行,则布尔值数组只能是单列且行数与待筛选数组行数一致的一维数组。

  1. 数组内容必须是布尔值,也就是True或者False(1,0等数字也可以)

由此,使用filter函数的关键,就是如何生成符合条件的布尔值数组,也就是如何输入条件。

下文提供常见的filter函数筛选条件案例,可参照学习。

1.1 filter单条件

按行筛选出年龄大于60的数据。

=FILTER(A2:C8,C2:C8>60)


按列筛选出姓名和年龄。

=FILTER(A2:C8,{1,0,1})

条件式中的{1,0,1}就是一组单行的布尔值数组,分别对应姓名、性别和年龄,其中大于等于1则提取保留,等于0则剔除,此处直接写了条件式结果。

1.2 filter同时满足多个条件

按行筛选性别女且年龄大于50的数据。

=FILTER(A2:C8,(B2:B8="女")*(C2:C8>50))

注意多个条件同时满足情况下,使用 * 将多个条件相乘,此处不适用and函数,是由于and函数的最终结果是唯一值,不是数组。

把条件写在单元格内,最终结果如下图所示。只有全部满足,结果才为1。


1.3 filter满足多个条件中的任意一个条件

按行筛选性别女或年龄大于50的数据。

=FILTER(A2:C8,(B2:B8="女")+(C2:C8>50))

与同时满足条件相比,唯一的区别就是多个条件之间使用+相加,此时,只需有一个满足,那么结果至少会大于1。

1.4 filter同时满足两个条件或满足其他任意一个条件

按行筛选年龄小于等于60且性别为女,或者年龄小于30的数据

=FILTER(A2:C8,((B2:B8="女")*(C2:C8<=60))+(C2:C8<=30))

存在较为复杂的条件时,直接使用括号将对应条件合并成另一个新条件,再进行运算。

例如需求中的第一个且条件里的多个条件相乘,然后合并在一起与另一个条件相加做或条件。

2. 使用普通if函数代替实现filter函数效果

如果软件版本没有filter,也想实现类似的效果,可以使用if函数搭配数组公式实现。

当然,不支持动态数组的软件版本,还是要按照原本的数组公式录入方法进行使用。

数组公式使用方法

  1. 需提前选中承接数组公式结果的单元格区域

  2. 再输入数组公式

  3. 最后需要按数组确认键 CTRL+SHIFT+回车 确认公式

具体使用,可以参考下方案例直接套用公式:

2.1 单条件筛选

=SORT(IF(B2:B8="男",A2:C8,""),,-1)

由于单独使用if筛选,会导致不符合条件的数据变成空值,且留在原有的位置,因此使用sort函数,将其按倒序排序,使其符合条件的值保留在上方。

不好的点在于最终会对结果数据进行排序,如果要不进行排序操作,直接剔除空值数据的做法会很复杂,不建议使用。

2.2 多条件筛选

同时满足情况下用*链接所有条件,或条件情况下用+链接。这与filter的多条件用法保持一致。

=SORT(IF((B2:B8="男")*(C2:C8>60),A2:C8,""),,-1)


if函数筛选的其余情况基本与filter函数的使用条件一致,灵活创建条件式生成的布尔值,可以实现不同的效果。

比如在之前发布的unique函数文章中(可看主页文章列表),我们就利用了match函数与row函数定位了不重复数据的位置。

由此,你也可以生成对应的布尔值数组,可以用来给if函数,直接返回所有的不重复数据,感兴趣的同学,欢迎评论留言。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容