结合 VSTACK 和 UNIQUE 函数去除重复行,核心逻辑是“先垂直堆叠合并,再提取唯一值”。这种组合特别适用于跨工作表、跨文件或多区域的数据汇总去重。
以下是具体的操作方法、公式模板及关键注意事项:
一、 基础用法:多区域/多表合并去重
如果你需要将多个不连续的区域或不同工作表的数据合并,并去除完全相同的重复行,可以使用以下嵌套公式:
通用公式结构:
excel=UNIQUE(VSTACK(区域1, 区域2, [区域3], ...))
操作示例:
假设你要合并 Sheet1 的 A2:C10 和 Sheet2 的 A2:C10,并去除重复行:
在空白单元格输入:
excel=UNIQUE(VSTACK(Sheet1!A2:C10, Sheet2!A2:C10))按回车,结果会自动溢出显示。所有在两个表中完全一致的行(整行内容相同)仅保留一行。
二、 进阶场景处理
1. 跨多个连续工作表去重(三维引用)
如果数据分布在命名连续的工作表中(如“1月”到“12月”),可以使用冒号 : 进行三维引用,无需逐个列举。
公式示例:
excel=UNIQUE(VSTACK('1月:12月'!A2:C100))
注意:确保起始表和结束表之间没有无关的工作表,且所有表的列结构一致。
2. 去除空值和错误值
源数据中若包含空白单元格,VSTACK 合并后 UNIQUE 可能会保留一个空白行或显示 0。建议搭配 FILTER 或 TOCOL 清洗数据。
方案 A:使用 FILTER 过滤空行(推荐)
excel=UNIQUE(FILTER(VSTACK(表1!A2:C10, 表2!A2:C10), INDEX(VSTACK(表1!A2:A10, 表2!A2:A10),,1)<>""))
解释:先合并数据,再通过判断第一列是否为空来过滤掉整行为空的记录,最后去重。
方案 B:简单隐藏 0 值
如果不去除空行,只是不想看到 0,可以选中结果区域,设置自定义格式为 [=0]"";General。
3. 仅针对特定列去重(保留整行)
UNIQUE 默认判断整行是否完全一致。如果你希望根据“订单号”去重,但保留其他列数据,UNIQUE 无法直接实现“保留最新/最早一行”的逻辑。
解决方法:先用
VSTACK合并,然后使用“数据”选项卡下的“删除重复项”功能,勾选指定列;或使用 Power Query 进行更复杂的去重逻辑处理。
三、 关键注意事项
表头处理:
VSTACK不会自动识别表头。如果每个区域都包含表头,合并后会出现多个重复表头,导致UNIQUE无法正确去重数据行。正确做法:在
VSTACK的参数中,第一个区域包含表头(如果需要保留表头),后续区域仅选择数据行(不包含表头)。例如:
=UNIQUE(VSTACK(Sheet1!A1:C10, Sheet2!A2:C10))去重标准:
UNIQUE判断重复的标准是整行内容完全一致(包括空格、标点、格式差异导致的文本不同)。如果数据中存在肉眼不可见的空格,建议先用
TRIM函数清理数据,或使用SUBSTITUTE去除空格后再去重。版本兼容性:
VSTACK和UNIQUE均为动态数组函数,需使用 Excel 365、Excel 2021 或最新版 WPS 表格 才能正常使用。旧版 Excel 不支持此组合。性能优化:
当数据量极大(如数万行)时,嵌套函数可能导致计算缓慢。此时建议使用 Power Query 的“追加查询”+“删除重复项”功能,它支持增量刷新且不占用单元格公式资源。
四、 替代方案(非公式法)
如果不使用公式,或数据量极大导致公式计算缓慢,可使用以下方法:
Power Query:
数据 → 获取数据 → 从文件夹/工作簿。
使用“追加查询”合并所有表。
选中需要去重的列 → 右键 → “删除重复项”。
优点:支持大数据量,可刷新,不占用单元格公式资源。
传统菜单操作:
手动或用
VSTACK合并数据后。选中结果区域 → 点击“数据”选项卡 → “删除重复项” → 勾选判断依据的列 → 确定。
扫一扫在手机打开







