今天,我们来解锁Excel 365、2021的“动态筛选神器”——FILTER函数。它像一把“智能筛子”,能按你的条件自动过滤数据,结果还会动态更新,更厉害的是:支持多条件、多列返回,让数据筛选从“手动操作”一步跨入“公式自动化”时代!
FILTER函数的唯一使命:根据指定条件,从数据区域中筛选出符合条件的行,返回动态数组结果。
简单说:给它“数据区域”和“筛选条件”,它就能“吐”出你要的结果,且数据新增/修改时,结果自动更新。
与传统筛选的区别:传统筛选是“临时视图”,FILTER是“永久公式”——结果存于单元格,可计算、可引用、可联动图表。
FILTER(array, include, [if_empty])
| 参数 | 含义 | 关键说明 |
|---|---|---|
array | 要筛选的原始数据区域(如A1:D100,含标题行可选) | 可以是单行/单列/多行多列区域,建议用绝对引用(如A1:D100)固定范围 |
include | 筛选条件(逻辑值数组,TRUE保留行,FALSE排除行) | 必须与array的行数相同,条件可单条件/多条件(用*表“且”,+表“或”) |
[if_empty] | 无符合条件数据时的返回值(可选,默认返回#CALC!错误) | 建议显式设置,如"无匹配数据",避免错误显示 |

公式:
=FILTER($A$2:$F$31,$D$2:$D$31="客服部","")解析:array=$A$2:$F$31(全部数据),include=$D$2:$D$31="客服部"(D列等于“客服部”的行标记为TRUE),if_empty无结果时显示为空。
效果:自动返回所有销售部员工的整行数据,结果动态溢出到相邻单元格。

公式:
=FILTER(F2:F31,A2:A31="李娜","")
公式:
=FILTER($A$2:$F$31,($D$2:$D$31="财务部")*($F$2:$F$31>8000),"")解析:($D$2:$D$31="财务部")和($F$2:$F$31>8000)是两个逻辑数组,相乘后仅当两条件都为TRUE时结果才为TRUE(保留该行)。

公式:
=FILTER($A$2:$F$31,($D$2:$D$31="采购部")+($D$2:$D$31="技术部"),"")解析:相加后只要任一条件为TRUE(1+0=1或0+1=1),结果即为TRUE(保留该行)。
需求:筛选“研发部”员工的“姓名”和“薪资”

公式:
=CHOOSECOLS(FILTER($A$2:$F$31,$D$2:$D$31="研发部",""),1,6)解析:filter函数返回所有研发部的数据,然后通过chooseclos挑选出需要的姓名和工资列,最后最终结果。
需求:将员工姓名按部门汇总到一个单元格,姓名之间用都逗号隔开。

公式:
=TEXTJOIN(",",TRUE,FILTER($A$2:$A$31,$D$2:$D$31=$I4,""))解析:filter函数筛选出结果后,通过textjoin函数把结果用逗号连起来,得到最终结果。
需求:筛选姓“王”的员工信息

公式:
=FILTER($A$2:$F$31,ISNUMBER(FIND("王",A2:A31)),"")#VALUE!错误:include参数与array行数不匹配原因:include的逻辑数组行数与array不一致(如array是10行,include写了9行条件)。
解决:确保include的条件区域与array行数完全相同(可用A1:A10而非A:A,避免空行干扰)。
#CALC!错误:无符合条件数据且未设if_empty原因:筛选结果为空,且未指定[if_empty]参数。
解决:显式设置if_empty,如"无匹配数据"或""(空文本)。
现象:FILTER结果自动溢出时,若目标单元格已有数据,会显示#SPILL!错误。
解决:清空溢出区域的旧数据,或调整公式位置到有空白单元格的区域。
注意:FILTER是Excel 365、2021新增函数,Excel 2019及更早版本无法使用(可用“高级筛选”替代)。
好了,今天内容就是这么多,下次咱再接着说。温暖自己也给人力量,下次见~