结合 FILTER 和 UNIQUE 函数是实现“先按条件筛选,再对结果去重”最高效的方法。这种组合逻辑清晰:FILTER 负责从海量数据中捞出符合条件的行,UNIQUE 负责将捞出的结果剔除重复项。
以下是具体的操作逻辑、公式模板及常见场景示例:
一、 核心公式结构
excel=UNIQUE(FILTER(返回区域, 条件区域=条件值, [空值提示]))
返回区域:你希望最终显示的数据列(例如:产品名列、城市名列)。
条件区域:用于判断是否符合条件的列(例如:地区列、部门列)。
条件值:具体的筛选标准(可以是单元格引用,如 G1,也可以是直接输入的文本 "华北")。
空值提示(可选):当没有数据符合条件时,显示的内容(如 "无数据"),避免报错。
二、 具体场景示例
场景 1:单条件去重(最常用)
需求:从销售表中提取“新城区”所有不重复的产品名称。
数据源:B列为产品,C列为区域。
条件:区域等于单元格 G1 中的“新城区”。
公式:
excel=UNIQUE(FILTER(B2:B100, C2:C100=G1, "无匹配数据"))
执行逻辑:
FILTER先找出 C 列中所有等于“新城区”的行,并返回对应的 B 列产品名(此时可能包含重复产品)。UNIQUE接收 FILTER 的结果,剔除重复的产品名,只保留唯一值。
场景 2:多条件同时满足去重(且关系)
需求:提取“华北地区”且“销售额大于 1000”的不重复客户名单。
数据源:A列为客户,B列为地区,C列为销售额。
条件:地区="华北" 且 销售额>1000。
公式:
excel=UNIQUE(FILTER(A2:A100, (B2:B100="华北") * (C2:C100>1000), "无数据"))
关键点:
使用乘号
*连接多个条件,代表逻辑“与”(AND)。每个条件必须用括号
()包裹,以确保运算优先级正确。
场景 3:多条件任一满足去重(或关系)
需求:提取地区为“华北” 或 “华东”的不重复城市列表。
数据源:A列为城市,B列为地区。
公式:
excel=UNIQUE(FILTER(A2:A100, (B2:B100="华北") + (B2:B100="华东"), "无数据"))
关键点:
使用加号
+连接条件,代表逻辑“或”(OR)。
场景 4:跨表/跨区域合并后条件去重(结合 VSTACK)
需求:从“1月”和“2月”两张表中,汇总所有“已完成”订单的不重复订单号。
数据源:两张表的 A 列为订单号,B 列为状态。
公式:
excel=UNIQUE(FILTER(VSTACK('1月'!A2:B50, '2月'!A2:B50),
VSTACK('1月'!B2:B50, '2月'!B2:B50)="已完成",
"无数据"))
注意:
FILTER的条件数组行数必须与数据数组行数一致。因此,条件区域也需要用VSTACK进行同样的堆叠处理。
三、 常见问题与优化技巧
1. 为什么会出现 #CALC! 错误?
如果 FILTER 没有找到任何符合行的数据,它会返回 #CALC! 错误,导致 UNIQUE 也报错。
解决方法:务必使用
FILTER的第三个参数[if_empty]。excel=UNIQUE(FILTER(B2:B10, C2:C10="不存在", "暂无数据"))
2. 如何忽略空白单元格?
如果筛选结果中包含大量空白行,UNIQUE 会保留一个空白项。
解决方法:在
FILTER中增加一个非空条件。excel=UNIQUE(FILTER(B2:B100, (C2:C100=G1) * (B2:B100<>""), ""))
3. 如何对去重后的结果排序?
如果需要结果不仅去重,还按字母或数字顺序排列,可以在外层嵌套 SORT 函数。
公式:
excel=SORT(UNIQUE(FILTER(B2:B100, C2:C100=G1, "")))
4. 性能优化建议
避免整列引用:尽量不要使用
B:B或C:C这样的整列引用,这会显著降低计算速度。建议指定具体范围(如B2:B1000)或将数据源转换为超级表(Table),使用结构化引用(如Table1[产品]),这样既能自动扩展范围,又能保证计算效率。
四、 总结对比
通过这种嵌套方式,你可以灵活应对绝大多数“查找特定条件下不重复值”的业务场景,无需借助透视表或高级筛选等手动操作。
扫一扫在手机打开







