从“删除重复项”到动态数组:UNIQUE 的演进定位
在 2026 春季版(内部版 12.2.11038)之前,WPS 表格的去重逻辑依赖「数据→删除重复项」命令,操作结果会直接改写原数据,且不支持自动刷新。2024 年起,WPS 先引入动态数组引擎,2025 年补齐 UNIQUE 函数,至此「一键提取不重复名单」才真正具备不破坏源数据、溢出更新、跨端同步三大特性。
核心关键词 UNIQUE函数 在此首次出现:它返回无重复值列表,并随源区域增减自动溢出。与「删除重复项」相比,UNIQUE 只读不写,天然适合多人协作场景;与高级筛选相比,UNIQUE 无需手动刷新,公式即结果。
最短可达路径:Windows / macOS / Linux 桌面端
1. 选中空白单元格(留足溢出空间,下方不得有数据)。
2. 输入:=UNIQUE(A2:A200),回车即可溢出不重复名单。
3. 如需按列去重,追加参数:=UNIQUE(A2:C200,TRUE)。
失败分支:若回车后仅显示单个值,无溢出,请检查「文件→选项→启用动态数组」是否勾选;该选项在 2025 之后默认开启,但升级自老版本的用户需手动确认。
移动端(Android / iOS / 鸿蒙 NEXT)路径差异
1. 打开表格→点「编辑」进入公式键盘。
2. 切到「函数」页签→搜索「UNIQUE」→选中后按向导填入源区域。
3. 点「√」即完成;溢出区域以蓝色虚线框提示,若下方单元格被占用,会弹窗要求「清除目标区域」或「另选输出位置」。
经验性观察:在鸿蒙 NEXT 5.0 的「跨屏续写」模式下,手机端输入 UNIQUE 后,电脑端会即时同步公式,但溢出区域需电脑端重新计算才能显示,属于当前版本的实现差异。
语法与第三参数:ExactlyOnce 的取舍
UNIQUE 的第三参数 [by_col] 与第四参数 [exactly_once] 常被混淆。
by_col=TRUE 表示「按列比对」,适用于横向表头去重;
exactly_once=TRUE 则返回「仅出现一次」的值,等同于「唯一名单」而非「不重复名单」。
示例:客服部统计「仅投诉一次的客户」,用 =UNIQUE(B2:B100,,TRUE) 即可,无需辅助列。若误用 exactly_once=FALSE,会把多次投诉者也算进来,导致后续回访超量。
常见例外:空白、错误值、区分大小写
1. 空白单元格会被 UNIQUE 视为一个有效值,输出「0」或空串;若需排除,可外套 FILTER:=UNIQUE(FILTER(A2:A200,A2:A200<>""))。
2. 错误值(#N/A、#DIV/0!)会导致整个公式返回错误,需先 IFERROR 清洗。
3. 文本区分大小写:UNIQUE 默认不区分,「Apple」与「apple」视为相同;若需区分,可借助 EXACT 辅助列,再套 FILTER。
性能边界:多少行会卡?
经验性观察:在 8 代 i5 + 16 GB 环境下,对 20 万行单列去重,UNIQUE 首次计算约 3–5 秒;超过 50 万行可能出现「计算中」进度条。若源数据含大量公式,建议先「复制为值」再 UNIQUE,可缩短一半时间。
回退与兼容:发给 Excel 2019 会怎样?
UNIQUE 属于动态数组函数,在微软体系仅 Office 365 2019 下半年之后支持。若文件需分发给旧版 Excel 用户,请:
- 「复制为值」再发送;或
- 使用「文件→检查兼容性」→勾选「转换为静态值」,WPS 会自动把 UNIQUE 区域替换为数值,并保留格式。
经验性观察:Linux 版 WPS 保存为 .xlsb 后,UNIQUE 会被自动转成「_xlfn.UNIQUE」存公式,旧版 Excel 打开显示 #NAME?,需手动删除。因此对外分发优先选用 .xlsx 而非二进制格式。
与数据透视表的取舍
若仅需「不重复名单」而非汇总统计,UNIQUE 比数据透视表更轻量:无需拖拽字段、不产生缓存、文件体积增量 < 1 KB。但若后续需「按地区统计不重复客户数」,透视表仍不可替代——可将 UNIQUE 作为中间层,再引用透视表。
与 Python in Cells 的协同
WPS 表格已内嵌 Python 3.12,若数据需复杂清洗(正则、模糊匹配),可在 py 单元格写:
import pandas as pd lst = df['客户名'].drop_duplicates().tolist()
再把 lst 溢出到相邻区域。相比原生 UNIQUE,Python 方案可处理「中文简繁体归一」「拼音首字母相同」等模糊去重,但计算延迟高于 UNIQUE 一个量级,适合一次性的分析场景。
验证与观测:如何确认结果正确?
1. 使用「数据→数据验证→序列」把 UNIQUE 溢出区域设为下拉菜单,若下拉值与源表不一致,可立即发现遗漏。
2. 在旁边加辅助列 =COUNTIF(A:A,D2),若返回值 >1 说明 UNIQUE 漏判,需检查隐藏空格或不可见字符。
3. 打开「视图→公式审查→错误检查」,若出现「循环引用」提示,多为 UNIQUE 溢出区域下方被公式引用,需移开引用位置。
适用 / 不适用场景清单
| 场景 | 是否推荐 UNIQUE | 替代方案 |
|---|---|---|
| 日报表自动去重名单(<1 万行) | ✅ 推荐 | — |
| 财务系统百万行凭证去重 | ❌ 不推荐 | Power Query / Python |
| 需区分大小写的代码列表 | ⚠️ 需辅助列 | EXACT+FILTER |
| 旧版 Excel 用户协作 | ⚠️ 需静态值 | 复制为值 |
最佳实践 6 条(检查表)
- 源数据含公式 → 先「复制为值」再 UNIQUE,减少重算。
- 溢出区域下方预留至少 1 空行,防止新增数据被覆盖。
- 对外分发前,运行「兼容性检查」→ 转换静态值,避免 #NAME?。
- 需要自动刷新时,把源数据转换为「表格」对象(Ctrl+T),新增行会被 UNIQUE 即时收录。
- 多人协作场景,把 UNIQUE 结果单独放一张「去重名单」工作表,设为只读供引用。
- 若结果需排序,外套 SORT:
=SORT(UNIQUE(A2:A200)),一次公式解决「去重+排序」。
FAQ:常见 5 问
Q1:UNIQUE 溢出区域能否直接打印?
A:可以,打印预览会自动识别溢出范围,无需手动选取区域;若只想打印部分,可在「页面布局→打印区域→设置打印区域」内框选即可。
Q2:为何打开老文件看到 #FIELD!?
A:老版本使用 FILTER 嵌套 UNIQUE 时,若升级后语言包不一致,字段名引用会失效。把旧字段名改回中文或重新选择即可恢复。
Q3:移动端能否拖动溢出右下角调整大小?
A:截至当前最新版本,移动端不支持手动拖动溢出框;如需缩小范围,请修改公式源区域或在桌面端操作后同步回云。
Q4:UNIQUE 能否跨工作簿引用?
A:支持,但源工作簿必须同时打开;否则返回 #REF!。若需离线查看,请把源数据复制到当前工作簿再使用 UNIQUE。
Q5:云协作时别人误删了 UNIQUE 公式,如何找回?
A:点击右上角「协作记录」→选择 30 天内任意节点→「还原此版本」;或「文件→版本历史」→对比差异→单独复制丢失的公式单元格即可。
收尾:下一步行动
UNIQUE 函数把「去重」从一次性操作升级为可持续的数据服务:不破坏源、自动刷新、跨端同步。若你仍在用「删除重复项」或「高级筛选」,建议立即在副本文件试跑 UNIQUE,对比耗时与后续维护成本;确认无误后,再把正式报表迁移到动态数组体系,并结合「表格对象+SORT」实现全自动更新。
最后提醒:对外分发前,务必运行兼容性检查或复制为值,避免旧版 Excel 用户看到 #NAME?;百万行以上场景,请优先使用 Power Query 或 Python in Cells,以保性能与可追踪性。
