夜雨聆风学习资料网

ARTICLE · 1102379

还在点筛选?Excel 一行公式搞定

还在点筛选?Excel 一行公式搞定

先说个扎心的事实。

你每天在 Excel 里忙的那套活——点「数据」→「筛选」→ 勾条件 → 复制可见单元格 → 贴到新表 → 再调一遍格式——本质上不是在做分析,是在用体力换数据。

下班时间就是这么一格一格走掉的:不是被工作占满的,是被「重复点击」占满的。

筛选是在「看」,FILTER 是在「取」。前者是一张滤纸,后者是一台抽水泵。

今天这篇,就讲清楚 Excel 里最被低估的一个函数:FILTER。


一、FILTER 到底是个什么东西

一句话定义:它按条件从一片数据里,把符合的行整行「捞」出来,而且结果会跟着源数据自动更新。

你改了源表,结果自己就变了。不用重新点筛选,不用重新复制。

这就是它和传统筛选最大的区别——传统筛选是「一次动作」,FILTER 是「一个活的引用」。

语法长得不吓人,就三段:

=FILTER(要返回的数据区域, 筛选条件, [没有结果时显示什么])

第一段:你要捞哪片数据(通常是 A2:D100 这种)

第二段:什么条件算数(比如 C2:C100="西北大区")

第三段:捞不到东西时显示啥(可省略,但强烈建议写上)

版本前提(先自查,别白激动):FILTER 属于动态数组函数,Excel 2021 和 Microsoft 365 才有。2019 及更早版本没有,WPS 需要较新的版本。中文版函数名没有汉化,直接敲FILTER就行。


二、最基础的一招:单条件,三秒交活

假设你有一张销售明细,A 列是日期,B 列是产品,C 列是区域,D 列是销量。

要捞出「西北大区」的全部数据:

=FILTER(A2:D100, C2:C100="西北大区", "无数据")

回车。整片数据哗一下就出来了。

这里有个坑必须提前说:条件区域的长度必须和返回区域的行数一模一样。你写FILTER(A2:D100, C2:C99, ...),Excel 会直接甩你一个#VALUE!。这两个区域得是同一条生命的上下半身,不能一个长一个短。


三、多条件:和用乘号,或用加号

这是 FILTER 最反直觉、也最容易记错的地方。

多个条件同时满足(和)→ 条件之间用*(乘号)

=FILTER(A2:D100, (C2:C100="西北大区")*(D2:D100>500), "无数据")

为啥是乘号?因为每个条件算出来是一串 TRUE/FALSE,TRUE 当 1,FALSE 当 0。1×1=1(都满足),只要有一个是 0,乘出来就是 0,行就出局。逻辑上叫「与」,写起来就是乘法。

满足任意一个(或)→ 用+(加号)

=FILTER(A2:D100, (C2:C100="西北大区")+(C2:C100="华北区"), "无数据")

只要有一边成立就是 1,行就留下。

记住口诀:和用乘、或用加。这一句,能省你半年的「为什么筛不出来」的抓狂。

顺带一句:每个条件都得用括号包起来。C2:C100="西北大区"*D2:D100>500这么写,Excel 会按算术优先级先算等号再算乘号,结果离谱到你怀疑人生。


四、进阶三连:排序、取前 N、跨表引用

光会捞还不够,捞出来还得能用。FILTER 真正的威力,是能跟其他动态数组函数套娃。

1. 捞完直接排序—— 套一层SORT

=SORT(FILTER(A2:D100, C2:C100="西北大区"), 4, -1)

第三个参数-1是降序、1是升序,第二个参数4表示按第 4 列排。

2. 只要前 5 名—— 外面再套一层TAKE

=TAKE(SORT(FILTER(A2:D100, C2:C100="西北大区"), 4, -1), 5)

一行公式 = 筛选 + 排序 + 取 Top5。这套活手工干,是先筛、再排、再数着行删,没有十分钟下不来。

3. 跨表捞数据

=FILTER(数据表!A2:D1000, 数据表!C2:C1000=A2, "无数据")

在汇总表里写这一句,A2 换成你要查的区域名,整片数据就自动飘过来了。下拉一格,就是下一个区域。这才是「报表」该有的样子。


五、踩坑清单:这几个错,90% 的人都踩过

这一节请认真看,看得越认真,省下的骂人时间越多。

①#SPILL!溢出错误

最常见的报错。原因只有一个:FILTER 要吐出的结果被别的东西挡住了。结果区域下方或者右侧有内容,Excel 没地方铺开。解决:清空结果要落的那片区域,留够空格子。

②#CALC!空数组错误

条件筛出来一条都不剩,而你又没写第三段「没结果时显示什么」。Excel 手里空空的,只好报错。所以第三段一定写上,写"无数据"或者""都行。

③ FILTER 不带你想要的表头

它只返回符合条件的数据行,表头是它自己那一行的,不重复给。想要表头,得自己在新表上面手动留一行,或者用VSTACK拼一句:

=VSTACK(A1:D1, FILTER(A2:D100, C2:C100="西北大区", "无数据"))

④ 别整列引用,会卡到你想砸电脑

FILTER(A:D, C:C="西北大区")这种写法看着潇洒,实际是在让 Excel 处理一百多万行。数据量一大,表格直接卡成幻灯片。老老实实写 A2:D1000 这种有边界区域。

⑤ 结果不带格式,只带值

FILTER 捞出的是纯数据,颜色、边框、数字格式统统不管。想要长得好看,得另外做条件格式或者手动补。别指望它顺手帮你美颜。

⑥ 空白行会被「误伤」

条件写成= ""去配空白单元格时,源数据里所有空行也会被算进去。清理源数据的空行,是比学函数更值钱的好习惯。

⑦ 旧版本 = 直接罢工

同事发来一个文件,你打开全是#NAME?,别急着怀疑人生,先看对方用的是不是 365。版本不匹配,函数名对方根本不认识。


六、一个真实场景:领导要「按部门拉数据」

场景很熟悉吧——领导说:「你把各部门的数据分别拉出来,发我。」

手工做法:筛选 → 复制 → 粘新表 → 改筛选条件 → 再复制 → 再粘……五个部门,来回十五遍。中间手一抖粘错一行,还得重来。

FILTER 做法:

建一张汇总表,左边一列写部门名:西北、华北、华东……

右边一格写上=FILTER(数据表!A2:D1000, 数据表!C2:C1000=A2, "无数据")

往下一拉。

完事。源数据以后每天更新,这张汇总表自己就跟着变。明天再来一遍?不用,它已经是活的了。

会筛选的人,每天都要重新干一遍;会用 FILTER 的人,只干一次。


写在最后

FILTER 不是什么高深的东西,它就是把你「重复做的事」变成「一次性的规则」。

真正的差距从来不在函数难不难,而在——你是愿意每天花半小时重复点击,还是愿意花十分钟学一个以后都不用再干的函数。

答案是显然的。只是大多数人,还是会选择继续点筛选。

因为点击不需要动脑,学函数需要。

那今天,你选哪个?

评论区说说:你在 Excel 里被哪个「重复动作」折磨得最狠?我挑几个高频的,下一篇专门拆。

相关学习资料