RSS订阅 爱办公,享无限效率

你现在的位置:

函数FILTER根据条件筛选数据

一、函数概述

FILTER 是 Excel 365 和 Excel 2021 引入的动态数组函数,用于根据指定条件筛选数据范围,并返回符合条件的所有行或列。筛选结果会自动溢出到相邻单元格,无需手动下拉填充 。

核心优势

  • 动态数组:结果自动扩展,数据更新时自动刷新
  • 多条件支持:可同时应用多个 AND/OR 条件
  • 灵活返回:可返回整行、特定列或重新排序后的结果
  • 错误处理:内置空值提示参数,避免 #N/A 错误

二、语法结构

=FILTER(
    array,          ← 必需:要筛选的数据范围
    include,        ← 必需:筛选条件(布尔表达式)
    [if_empty]      ← 可选:无匹配时返回的内容(默认 #CALC!)
)

三、参数详解

参数必需说明示例
array要筛选的数据范围(表、区域或数组)A2:D100TableDiv
include布尔条件,TRUE 的行被保留B2:B100="销售部"
if_empty无匹配时的返回值"无数据"0

四、核心逻辑:AND 与 OR 运算

FILTER 函数通过数学运算符实现逻辑组合 :

逻辑运算符原理示例
AND(且)* 乘号TRUE*TRUE=1(保留),其他组合=0(排除)(条件1)*(条件2)
OR(或)+ 加号TRUE+FALSE=1(保留),FALSE+FALSE=0(排除)(条件1)+(条件2)

原理说明:布尔值 TRUE/FALSE 参与数学运算时自动转为 1/0。乘法要求所有条件为 1 才保留,加法只需任一条件为 1 即保留 。


五、实用示例

示例 1:单条件筛选(基础用法)

场景:筛选”销售部”的所有员工

=FILTER(A2:D20, B2:B20="销售部", "未找到")
  • 在 B2:B20 中查找”销售部”
  • 返回 A2:D20 对应的整行数据
  • 无匹配时显示”未找到”

示例 2:多条件 AND 筛选(同时满足)

场景:筛选”Productivity”部门 “Finance”部门的员工

=FILTER(TableDiv, (TableDiv[Division]=G1) * (TableDiv[Department]=G2))
  • * 表示 AND 逻辑
  • 两个条件必须同时为 TRUE 才保留

三条件 AND(部门+地区+薪资):

=FILTER(TableDiv, 
    (TableDiv[Division]=G1) * 
    (TableDiv[Department]=G2) * 
    (TableDiv[Yearly Salary]>G3)
)

示例 3:多条件 OR 筛选(满足其一)

场景:筛选”Game”部门 “Utility”部门的员工

=FILTER(TableDiv, (TableDiv[Division]=G1) + (TableDiv[Division]=G2))
  • + 表示 OR 逻辑
  • 任一条件为 TRUE 即保留

示例 4:混合条件(AND + OR)

场景:筛选(”Game”或”Utility”部门) 薪资 > 80000

=FILTER(TableDiv, 
    ((TableDiv[Division]=G1) + (TableDiv[Division]=G2)) * 
    (TableDiv[Yearly Salary]>G3)
)
  • 注意括号:OR 条件需用括号包裹,确保先计算 OR 再与 AND 条件相乘

示例 5:返回特定列(配合 CHOOSECOLS)

场景:筛选后只返回”姓名”和”年薪”两列,并按年薪降序

=SORT(
    CHOOSECOLS(
        FILTER(TableDiv, 
            ((TableDiv[Division]=G1) + (TableDiv[Division]=G2)) * 
            (TableDiv[Yearly Salary]>G3)
        ), 
        2, 4  ← 返回第2列(姓名)和第4列(年薪)
    ), 
    2, -1   ← 按第2列降序
)

示例 6:配合 UNIQUE 去重

场景:筛选特定区域的产品,并去除重复项

=UNIQUE(FILTER(Sales_Data[Product], Sales_Data[Region]=B4))
  • 先筛选,再去重,返回唯一产品列表

示例 7:配合 SORT 排序

场景:筛选后自动排序

=SORT(FILTER(A2:D20, B2:B20="销售部"), 4, -1)
  • 筛选销售部数据
  • 按第4列(如销售额)降序排列

示例 8:复杂业务场景(库存预警)

场景:筛选库存低于安全库存的产品,并按库存量降序

=LET(
    rawData, A2:G100,
    filtered, FILTER(rawData, INDEX(rawData,,3) < 安全库存),
    SORT(filtered, 2, -1)  ← 按库存量降序
)

示例 9:一对多查询(超级查找)

场景:根据客户名称查找所有订单记录

=FILTER(A2:D100, B2:B100="张三", "无订单记录")
  • 返回”张三”的所有订单行
  • 传统 VLOOKUP 只能返回第一条,FILTER 返回全部

示例 10:日期筛选(按月筛选)

场景:筛选 2024 年 1 月的记录

=FILTER(A2:D100, TEXT(A2:A100,"YYYY-MM")="2024-01")
  • 用 TEXT 函数将日期转为”年-月”格式再比较

六、注意事项

注意点说明
版本要求需 Excel 365、Excel 2021 或 Excel 网页版;旧版 .xls 格式不支持
#SPILL! 错误结果区域被占用时显示,需清空下方单元格
#CALC! 错误无匹配结果且未设置 if_empty 参数时显示
动态数组特性结果自动溢出,不可在区域内插入内容
条件格式返回的数组需配合其他函数(如 CHOOSECOLS、SORT)进一步处理
性能优化大数据量时避免整列引用(如 A:A),建议用具体范围(如 A2:A10000

七、FILTER 函数组合技巧

组合函数用途示例
UNIQUE筛选后去重=UNIQUE(FILTER(...))
SORT筛选后排序=SORT(FILTER(...), 2, -1)
CHOOSECOLS筛选后选列=CHOOSECOLS(FILTER(...), 1, 3)
XLOOKUP多条件查找=XLOOKUP(..., FILTER(...))
LET简化复杂公式=LET(f, FILTER(...), SORT(f, 2))
TEXTJOIN合并筛选结果=TEXTJOIN(",", , FILTER(...))

八、FILTER vs 传统筛选对比

特性传统自动筛选FILTER 函数
结果位置在原数据位置可放置到任意位置
动态更新需手动刷新自动刷新
多条件界面操作公式化灵活组合
结果复用难以引用可作为其他函数输入
数据完整性隐藏行不破坏原数据

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注