以下是 VSTACK 和 UNIQUE 函数组合使用的具体示例公式,涵盖了从基础跨表去重到带条件筛选的常见场景。这些公式适用于 Excel 365、Excel 2021 及最新版 WPS 表格。
一、基础场景:跨工作表/区域提取不重复值
这是最核心的用法,用于将分散在不同位置的数据合并成一列(或几列),并自动去除重复项。
1. 跨两个不连续区域提取唯一名单
场景:A列和C列都有员工姓名,需要提取所有不重复的姓名列表。
excel=UNIQUE(VSTACK(A2:A9, C2:C9))
解析:
VSTACK先将A列和C列垂直堆叠成一个长数组,UNIQUE再从中提取唯一值。
2. 跨多个工作表合并去重
场景:需要从“1月”、“2月”、“3月”三个工作表的A列中提取所有不重复的客户名称。
excel=UNIQUE(VSTACK('1月'!A2:A100, '2月'!A2:A100, '3月'!A2:A100))
注意:如果工作表名称包含空格或特殊字符,需用单引号包裹,如
'1月'!。
3. 跨多列合并为一列去重
场景:B2:D10是一个多列区域,想把它变成一列并去重。
excel=UNIQUE(TOCOL(B2:D10, 1))
替代方案:虽然
TOCOL更直接,但若需结合其他垂直操作,也可用VSTACK逐列堆叠:excel=UNIQUE(VSTACK(B2:B10, C2:C10, D2:D10))
二、进阶场景:合并后过滤空值与错误
当源数据包含空白单元格或列数不一致时,直接去重可能会产生空行或 #N/A 错误,需进行清洗。
1. 合并去重并忽略空值
场景:合并两列数据,但希望结果中不包含空白单元格。
excel=UNIQUE(FILTER(VSTACK(A2:A10, B2:B10), VSTACK(A2:A10, B2:B10)<>""))
解析:
FILTER函数先剔除堆叠后的空值,UNIQUE再对剩余数据进行去重。
2. 处理列数不一致产生的 #N/A
场景:表1有3列,表2只有2列,直接VSTACK会在表2缺失列处产生 #N/A。
excel=UNIQUE(IFERROR(VSTACK(Table1!A2:C10, Table2!A2:B10), ""))
解析:
IFERROR(..., "")将所有错误值替换为空文本,避免干扰去重逻辑。
三、高阶场景:多条件筛选后去重
结合 FILTER 函数,可以在合并的同时进行条件筛选,最后再去重。
1. 合并多表并筛选特定条件
场景:合并“华东区”和“华北区”两个表的销售记录,只保留“金额>1000”且不重复的订单号(假设订单号在A列,金额在C列)。
excel=UNIQUE(FILTER(VSTACK(华东!A2:C100, 华北!A2:C100), (VSTACK(华东!C2:C100, 华北!C2:C100)>1000)))
注意:
FILTER的条件区域必须与数据区域的行数一致。
2. 多条件组合筛选
场景:合并两个表,筛选出“部门为销售部”且“状态为已完成”的不重复项目名称。
excel=UNIQUE(FILTER(VSTACK(Table1!A2:D50, Table2!A2:D50),
(VSTACK(Table1!B2:B50, Table2!B2:B50)="销售部") *
(VSTACK(Table1!D2:D50, Table2!D2:D50)="已完成")))
解析:使用乘号
*连接多个条件,表示“且”的关系。
四、实用技巧:动态更新与超级表
为了让公式在源数据增加时自动更新,建议将源数据区域转换为超级表(Table)。
示例公式:
假设将源数据转换为名为 Table1 和 Table2 的超级表:
excel=UNIQUE(VSTACK(Table1[姓名], Table2[姓名]))
优势:当你在
Table1或Table2底部新增行时,公式引用的范围会自动扩展,结果实时刷新,无需手动调整公式中的单元格范围。
五、常见问题排查
#SPILL! 错误:确保公式下方和右侧有足够的空白单元格供结果溢出。如果有数据阻挡,请清空周围区域。
#NAME? 错误:检查是否使用了不支持动态数组的旧版 Excel(如 Excel 2019 及更早版本)。
结果包含空行:如果源数据中有空白单元格,
UNIQUE会将其视为一个唯一值。请使用上述“进阶场景1”中的FILTER方法剔除空值。
扫一扫在手机打开







