EXCEL中 一个公式, 筛出你要的所有行
- 2026-09-21 01:33:35
PART 01
FILTER 是什么
动态数组筛选利器
PART 02
基础语法详解
三参数一次搞懂
PART 03
单条件筛选
最简单的场景
PART 04
多条件筛选
AND 与 OR 组合
PART 05
运算符大全
大于小于模糊匹配
PART 06
无匹配处理
第三参数安全网
PART 07
返回指定列
只取需要字段
PART 08
与其他函数组合
FILTER 黄金搭档
PART 09
实战案例
销售多维分析
PART 10
常见错误
避开崩溃的坑
PART 11
练习题
动手巩固提高
PART ///
速查卡
收藏备用
一个公式,把“符合条件”的行自动“流”出来
01
PART
FILTER 函数是什么?
动态数组时代的筛选利器
Excel 中的 FILTER 函数,就像一位“数据筛选魔法师”!它属于 Excel 动态数组函数 家族,能够根据你设定的条件,从海量数据中瞬间提取出想要的数据。
与传统筛选不同,FILTER 可实现动态筛选——源数据一变,筛选结果自动跟着变,无需手动刷新!
通俗理解
FILTER 像智能筛子
把不符合条件的颗粒全部漏掉,只留下符合条件的
FILTER 像忠诚的管家
你说“只要销售部的”,它绝不会给你技术部的
FILTER 像自动门
满足条件就开门放行,不满足就拦在外面
重要提示 FILTER 函数仅支持 Excel 365 / Excel 2021 / WPS 新版。如果你的 Excel 版本较旧,会显示 #NAME? 错误,请升级或使用高级筛选功能替代。
02
PART
FILTER 基础语法详解
三个参数,一次搞懂
FILTER 函数只需要记住三个参数,非常简单:
语法
公式=FILTER(数组, 包含, [如果为空])
参数说明
工作原理
你指定一个数据区域(数组)
你写一条判断规则(条件)
FILTER 逐行检查,条件为 TRUE 就保留该行,FALSE 就排除
如果没有一行符合条件,且你没写第三参数,就报错 #CALC!
核心要点
1. FILTER 返回的是动态数组,结果会自动“溢出”到下方单元格
2. 第三参数强烈建议写上,避免无匹配时报错
3. 条件区域的行数必须与数组的行数一致,否则会报 #VALUE!
03
PART
单条件筛选(入门)
最简单的筛选场景
单条件筛选是 FILTER 最基础的用法,只需要一个判断条件。
实战示例:筛选“销售部”的所有员工
假设 A2:C6 是员工表:
公式=FILTER(A2:C6, B2:B6="销售")
【结果】只返回张三、王五两行:
条件 B2:B6="销售" 产生了一个布尔数组 {TRUE; FALSE; TRUE; FALSE},FILTER 保留了第 1 行和第 3 行,丢弃了其他行。
✦ 实战技巧
1. 条件中的等号两边类型要一致,文本必须加英文引号 "销售" 2. 数字直接写,如 C2:C6>8000,不要加引号 3. 日期条件建议用单元格引用,如 B2:B10>=DATE(2026,1,1)
04
PART
多条件筛选(进阶)
AND 与 OR 的组合艺术
真实工作中,往往需要同时满足多个条件,或者满足任一条件即可。
4.1 AND 条件(同时满足)—— 用乘号 *
【场景】找出“销售部”且“业绩大于 8000”的员工
公式=FILTER(A2:C6, (B2:B6="销售")*(C2:C6>8000))
【原理】TRUE * TRUE = 1(保留);TRUE * FALSE = 0(排除);FALSE * FALSE = 0(排除)
【结果】只返回“王五”(销售部且 9300 > 8000)
4.2 OR 条件(满足任一)—— 用加号 +
【场景】找出“销售部”或“市场部”的员工
公式=FILTER(A2:C6, (B2:B6="销售")+(B2:B6="市场"))
【原理】TRUE + FALSE = 1(保留);FALSE + FALSE = 0(排除)
!踩坑提示 🕳
1. 每个条件必须用括号 () 包裹,否则运算顺序会出错 2. 条件之间用 * 表示 AND,用 + 表示 OR 3. 目前 FILTER 不支持直接的 AND()/OR() 函数嵌套,必须用运算符
05
PART
条件运算符大全
大于、小于、包含、模糊匹配
FILTER 支持所有常见的比较运算符:
模糊匹配(包含某文字)
FILTER 本身不支持通配符,需要借助 FIND 函数:
公式=FILTER(A2:A10, ISNUMBER(FIND("北京", B2:B10)))
FIND(“北京”, B2:B10) 查找包含“北京”的位置,找不到会报错;ISNUMBER() 将找到的位置(数字)转为 TRUE,将错误转为 FALSE。
✦ 技巧
如果要“不包含”某文字,用 NOT(ISNUMBER(FIND(...))) 包裹即可。
06
PART
处理无匹配结果
第三参数是你的“安全网”
如果筛选条件太严格,没有一行符合,FILTER 会返回 #CALC! 错误。这时候第三参数就是你的“安全网”。
错误示例
公式=FILTER(A2:C6, B2:B6="后勤")
结果:#CALC!(因为没有后勤部)
正确写法
公式=FILTER(A2:C6, B2:B6="后勤", "未找到数据")
结果:未找到数据
进阶写法(返回空表)
公式=FILTER(A2:C6, B2:B6="后勤", "")
结果:空白(适合需要继续下游计算的场景)
✦ 建议
无论你的数据看起来多么“完整”,都建议养成写第三参数的习惯。这能避免报表出现难看的错误值。
07
PART
返回指定列
只取你需要的字段
FILTER 的“数组”参数可以只选某一列,这样结果就是单列。
只返回姓名
公式=FILTER(A2:A6, B2:B6="销售")
返回多列中的特定列(用 CHOOSECOLS)
公式=CHOOSECOLS(FILTER(A2:C6, B2:B6="销售"), 1, 3)
结果只返回第 1 列(姓名)和第 3 列(业绩)。
!踩坑提示 🕳
CHOOSECOLS 也是 Excel 365 / 2021 新函数。旧版本可以用 INDEX 嵌套实现。
08
PART
与其他函数组合
FILTER 的黄金搭档们
FILTER 的真正威力在于与其他函数嵌套使用:
筛选后排序
公式=SORT(FILTER(A2:C6, B2:B6="销售"), 3, -1)
筛选后去重
公式=UNIQUE(FILTER(A2:A10, C2:C10>5000))
统计筛选结果数量
公式=COUNTA(FILTER(A2:A10, B2:B10="销售"))
计算筛选结果总和
公式=SUM(FILTER(C2:C10, B2:B10="销售"))
组合逻辑 记住一个原则:FILTER 负责“挑”,其他函数负责“算”。先 FILTER 缩小范围,再 SUM / COUNTA / SORT 做二次处理。
09
PART
实战案例:销售数据多维度分析
从需求到公式的完整演示
【场景】从 CRM 系统导出了以下订单数据,需要找出“已付款且金额大于 2000 元”的订单。
需求拆解
条件 1:状态 = “已付款”
条件 2:金额 > 2000
关系:AND(同时满足)
清洗准备
如果金额是文本型(如“¥2,999”),先用 SUBSTITUTE 和 VALUE 清洗:
公式=VALUE(SUBSTITUTE(SUBSTITUTE(C2,"¥",""),",",""))
筛选公式
公式=FILTER(A2:D6, (D2:D6="已付款")*(C2:C6>2000), "无匹配订单")
【结果】只返回 A001、A005 两单:
进一步统计
公式=SUM(FILTER(C2:C6, (D2:D6="已付款")*(C2:C6>2000)))
结果:6599(2999 + 3600)
✦ 实战技巧
1. 清洗后的数据务必“复制 → 选择性粘贴为值”覆盖原数据 2. 如果数据量很大,建议用辅助列放公式,清洗完再粘贴 3. 对于重复出现的筛选需求,可以录制宏实现一键筛选
10
PART
常见错误与解决方法
避开那些让人崩溃的坑
建议公式速查
=FILTER(A2:A10, B2:B10="销售") → 基础筛选
=FILTER(A2:C10, (B2:B10="销售")*(C2:C10>5000)) → AND 多条件
=FILTER(A2:C10, (B2:B10="销售")+(B2:B10="市场")) → OR 多条件
=FILTER(A2:A10, ISNUMBER(FIND("北京",B2:B10))) → 模糊匹配
=SORT(FILTER(A2:C10, B2:B10="销售"), 3, -1) → 筛选后降序
=IFERROR(FILTER(...), "未找到") → 防错处理
11
PART
练习题 · 巩固提高
动手练一练
筛选“市场部”的所有记录
答案=FILTER(A2:C6, B2:B6="市场部")
题目:A2:C6 是员工表,如何筛选出“市场部”的所有记录?
业绩大于 5000 且小于 10000
答案=FILTER(A2:C6, (C2:C6>5000)*(C2:C6<10000))
题目:如何筛选出“业绩大于 5000 且小于 10000”的员工?
销售部或技术部,只返回姓名列
答案=FILTER(A2:A6, (B2:B6="销售")+(B2:B6="技术"))
题目:如何筛选“销售部”或“技术部”,且只返回姓名列?
姓名中包含“张”字
答案=FILTER(A2:C6, ISNUMBER(FIND("张", A2:A6)))
题目:如何找出“姓名中包含‘张’字”的所有记录?
销售部业绩前 3 名,降序排列
答案=TAKE(SORT(FILTER(A2:C6, B2:B6="销售"), 3, -1), 3)
(先按第 3 列「业绩」降序排列,再用 TAKE 取前 3 行,直接得到销售部业绩前 3 名)
提示 FILTER 的核心是“先定范围,再写条件,最后防错”。简单筛选用单条件,复杂场景用多条件组合,模糊匹配用 FIND + ISNUMBER。
关注公众号 · 每日更新 · 告别加班!
///
LAST
FILTER 函数速查卡
收藏备用,随查随用
既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。
THANKS FOR READING