一个让 Excel 筛选效率翻倍的「神级函数」
动态数组· 一键提取 · 自动刷新
⚡ 版本要求 仅适用于 Microsoft 365、Excel 2021 及更高版本、Excel 网页版。 Excel 2019 及更早版本不支持此函数。 |
01 函数语法速览
FILTER 函数的核心作用是「动态提取」:根据设定的条件从数据区域中筛选数据,一旦源数据变化,结果自动刷新。
=FILTER(数组, 条件, [为空时返回值]) |
数组需要筛选的数据区域
条件筛选的逻辑判断(如 A1:A10="苹果")
为空时返回值可选。当没有符合条件的数据时,返回的自定义内容(如"无匹配数据")
02 基础用法:单条件筛选
实例 1:按文本条件筛选
场景有一份销售数据表(A5:E15),想筛选出"产品"列(C列)等于"苹果"的所有记录。
公式
=FILTER(A2:E15, C2:C15="苹果", "无匹配数据") 找不到"苹果"时返回"无匹配数据",否则自动溢出显示所有匹配行。 |

实例 2:按数值条件筛选
场景筛选"销售额"列(D列)大于 3000 的所有记录。
公式
=FILTER(A2:E15, D2:E15>3000, "无匹配数据") 支持所有标准比较运算符:> < >= <= <> |

实例 3:按日期条件筛选
场景筛选"日期"列(B列)在 2026年8月7日之后的所有记录。
公式
=FILTER(A2:E15,A2:A15>DATE(2026,8,7)"无匹配数据") 日期条件建议用 DATE() 函数构建,避免文本格式导致匹配失败。 |
03 进阶用法:多条件组合筛选
实例 4:多条件"且"逻辑(AND)
场景筛选"产品"为"苹果"且"区域"为"东部"的所有记录,两个条件必须同时满足。
公式
=FILTER(A2:E15,(D2:D15="苹果")*(C2:C15="东部"),"无匹配") 乘号 * 表示"且"逻辑,所有条件必须同时成立才会被提取。 |

实例 5:多条件"或"逻辑(OR)
场景筛选"产品"为"苹果"或者"区域"为"东部"的记录,满足任一条件即被提取。
公式
=FILTER(A2:E15,(D2:D15="苹果")+(C2:C15="东部"),"无匹配") 加号 + 表示"或"逻辑。注意:每个条件都必须加上括号 ()。 |

实例 6:混合"且"与"或"逻辑
场景筛选"(产品=苹果 且 区域=东部)"或"(销售额>10000)"的记录。
公式
=FILTER(A2:E15,((D2:D15="苹果")*(C2:C15="东部"))+(E2:E15>2500),"无匹配") 通过括号控制运算优先级:先计算"且"(乘法),再计算"或"(加法)。 |

04 高级用法:结合其他函数
实例 7:提取重复数据所在整行
场景数据在 A2:F15 区域,A列为ID。提取所有重复ID对应的整行数据(包括日期、部门、区域、水果、销售额等所有列)。
公式
=FILTER(A2:E15,COUNTIF(D2:D15,D2:D15)>1) COUNTIF 检查A列每个ID出现次数,大于1说明重复,FILTER 提取对应整行。 |

实例 8:提取重复数据中的特定列
场景只需提取重复编码对应的"部门"(C列)、"区域"(D列)和"水果"(E列),不需要其他列。
公式
=FILTER(HSTACK(C2:C15,D2:E15),COUNTIF(A2:A15,A2:A15)>1) 用HSTACK函数连接不同区域;将需要提取的列用逗号组合起来,作为 FILTER 的第一个参数。 |

实例 9:提取并去重
场景只想要重复编码对应的不重复记录(不管重复了几次,只要出现就列一次)。
公式
=UNIQUE(FILTER(A2:F15,COUNTIF(A2:A15,A2:A15)>1)) 外层嵌套 UNIQUE 函数,对筛选结果自动去重。 |

实例 10:筛选后按某列排序
场景筛选"苹果+东部"记录后,按"销售额"(第4列)降序排列。
公式
=SORT(FILTER(A2:E15,(D2:D15="苹果")*(C2:C15="东部")),5,-1) SORT 第2个参数指定按第几列排序,-1 表示降序(1 表示升序)。 |

实例 11:使用 CHOOSECOLS 提取特定列
场景在"区域"为"东部"且"销售额">"3000"的条件下,只提取"部门"(第2列)和"水果"(第4列)。
公式
=FILTER(CHOOSECOLS(A2:E15,2,4),(C2:C15="东部")*(E2:E15>3000),"无匹配数据") CHOOSECOLS 先从原始数据中挑选指定列,然后 FILTER 对这些列进行条件筛选。 |

实例 12:结合单元格引用实现动态查询
场景把查询条件写在单元格里,修改条件值即可自动刷新结果。"区域"写在 G2,"3000"写在 G3。
公式
=FILTER(A2:E15,(C2:C15=G2)*(E2:E15>G3),"无匹配数据") 条件引用了 H1 和 H2 单元格,只需修改这两个单元格的值,筛选结果自动更新。 |

05 常见问题与注意事项
1. 版本兼容性:FILTER 函数仅适用于 Excel 365、Excel 2021 及更高版本。老版本输入会提示 #NAME? 错误。
2. 区域对齐:FILTER 的第一个参数(提取范围)和第二个参数(条件范围)的行数必须完全一致,否则会返回 #VALUE! 错误。
3. 合并单元格:如果原始数据中有合并单元格,FILTER 函数可能出错,请确保数据源是标准清单格式。
4. 空值处理:使用整列引用时(如 A:F),务必加上非空条件 (A2:A<>""),否则会把大量空白行也当成重复数据提取出来。
5. 溢出范围:FILTER 结果会自动"溢出"到相邻单元格,确保结果区域下方和右方有足够空白空间,否则会被 #SPILL! 错误阻断。
6. 性能优化:避免在大数据量(超过10万行)时使用整列引用,建议将范围限定在实际数据区域内,以提升计算速度。
06 速查表:8种常用公式模板
功能 | 公式模板 |
单条件筛选 | =FILTER(范围, 条件, "无匹配") |
多条件"且" | =FILTER(范围, (条件1)*(条件2), "无匹配") |
多条件"或" | =FILTER(范围, (条件1)+(条件2), "无匹配") |
筛选+排序 | =SORT(FILTER(范围, 条件), 列号, -1) |
筛选+去重 | =UNIQUE(FILTER(范围, 条件)) |
筛选特定列 | =FILTER(CHOOSECOLS(范围, 列号1, 列号2), 条件) |
提取重复行 | =FILTER(范围, COUNTIF(ID列, ID列)>1) |
动态条件查询 | =FILTER(范围, (列=单元格引用), "无匹配") |
💡 提示:以上公式中的"范围"请根据实际数据区域调整。如果数据超过1000行,建议将范围扩大至实际数据行数,或直接引用整列(如 A:F),但需注意性能影响。
夜雨聆风