功能定位:为什么必须“合并到单列并去重”
在数据清洗环节,多列转单列并去重是最常见的“降维”动作:把分散在几列的会员 ID、商品编码或标签关键词,压成一张干净的一维表,后续才能做透视、匹配或导入数据库。WPS 表格在 2026 年仍维持与 Excel 365 相同的动态数组语法,因此官方文档中 FILTER、UNIQUE、TEXTJOIN 等函数均可直接调用,无需 VBA。
与“复制→粘贴→删除重复项”相比,公式法的最大好处是条件可改、结果实时刷新;代价则是文件体积会略增(经验性观察:含 5 万行数据时文件增大约 15%)。若你的报表需要周期性追加列,公式法一次搭建即可长期复用。
前置检查:版本、区域与文件格式
最低版本要求
截至当前的最新版本,Windows 桌面端需 12.8.0 以上,macOS 端需 4.9 以上,Android/iOS 需 13.3 以上;若打开文件时提示“#NAME?”错误,请先升级。
区域设置陷阱
WPS 允许在“选项→区域设置”中切换公式分隔符。若你的电脑用逗号作为小数点,则函数参数需改用分号“;”。下文所有示例默认“逗号区域”,如不符请自行替换。
核心思路:STACK→FILTER→UNIQUE 三步走
官方帮助中心把“多列合并”拆成三个动作:先纵向堆叠,再按条件筛选,最后去重。WPS 2026 暂未原生支持 Excel 的 VSTACK 函数,但可用“CHOOSE+SEQUENCE”构造等效数组,或直接利用 FILTER 的嵌套特性一次性完成堆叠与筛选。
操作路径(桌面端最短)
- 打开工作簿→选中空白目标列首格(如 F2)。
- 在公式栏一次性输入下列模板,按 Ctrl+Shift+Enter 结束(老版本)或直接回车(动态数组版本)。
说明:CHOOSE 把三列纵向拼成一列;FILTER 的第一参数是拼接后数组,第二参数同时排除空值与不符合条件的记录;UNIQUE 再去重。
操作路径(Android/iOS)
移动端公式栏默认隐藏“数组公式”按钮,需先:双击单元格→点“ƒx”→选择 FILTER→在向导里输入同上参数→完成后点“✓”。由于软键盘不易输入大括号,建议先在桌面端写好公式,再用云文档同步到手机,可避免符号错误。
小场景:把 3 个月份的“异常 SKU”合并到一列
假设 A~C 列分别存放 1~3 月异常 SKU,共 3000 行,需要提取“非空且带字母 X”的编码。按上述模板,把条件范围换成通配判断:
经验性观察:在骁龙 8 Gen2 手机端刷新约 2 万条记录需 5~7 秒;桌面 i5-1240P 约 1 秒内返回,属于可接受范围。
常见分支:如果列数不固定
当数据源会随时增加“4 月、5 月……”新列时,硬编码 CHOOSE 不再适用。可改用 TEXTJOIN 生成一维数组,但 TEXTJOIN 默认用分隔符拼成字符串,需再搭配 TEXTSPLIT 拆回数组:
注意:此法会先把所有单元格拼成超长字符串,若总字符超过 32767 会报错,适合列数多但行数不过万的轻量场景。
回退方案:公式报错或版本过低
- 若无动态数组,可转用“数据→高级筛选→复制到其他位置→勾选不重复记录”,但需手动重复操作。
- 若文件需交给外部低版本用户,建议把公式结果复制为值,避免对方打开后变成 #NAME?。
不适用场景清单
| 场景 | 原因 | 替代建议 |
|---|---|---|
| 单表超过 50 万行 | 动态数组内存占用高,可能假死 | 用 Power Query 或导入数据库 |
| 需要保留原始顺序 | UNIQUE 默认按出现顺序,但 FILTER 会剔除不符行,顺序或断裂 | 加辅助列记录原始行号再排序 |
| 合并后仍需写回共享工作簿 | 数组公式无法与“共享工作簿”兼容 | 先取消共享,计算完再复制为值 |
性能与合规注意事项
1. 公式整列引用(如 A:A)会让计算量陡增,务必限定行数上限。
2. 若文件存放于企业云盘,含敏感客户 ID,请确认 FILTER 结果未意外暴露隐藏行;可在“文件→信息→检查文档”里扫描隐藏属性。
验证与观测方法
- 在状态栏右键勾选“计数”,框选结果列,可见去重后条数。
- 用条件格式→重复值,对原始区域标记颜色,再对结果列标记颜色,肉眼比对是否仍有重复。
- 若需量化性能,可在“公式→计算选项→手动”下按 F9,用手机秒表记录刷新时长(经验性观察:一般 2 万行三列数据在桌面端低于 1 秒)。
最佳实践 5 条速查表
- 永远限定行数,忌用整列引用。
- 条件判断尽量放在 FILTER 内部,减少嵌套。
- 文件外发前,复制公式结果为值,防止低版本报错。
- 列数会膨胀时,优先用 Power Query 而非 TEXTSPLIT 长字符串。
- 需要保留顺序时,加辅助列记录行号,完成后再排序还原。
FAQ - 常见问题
为何返回 #SPILL! 错误?
目标区域下方有非空单元格,阻塞数组溢出。清空足够行或把公式放在空白列顶端即可。
可以一次性合并多工作表吗?
FILTER 只能引用当前表,跨表需先用“数据→合并计算”或 Power Query 汇总,再在同一表内执行去重。
结果如何按出现次数排序?
在相邻列用 COUNTIF 统计次数,然后对“结果+次数”两列用“数据→排序”即可。
总结与下一步行动
用 WPS 表格将多列数据按条件合并到单列并去重,核心是“CHOOSE 堆叠→FILTER 筛选→UNIQUE 去重”三件套。只要版本满足动态数组要求,一次搭建即可长期自动刷新。下一步,你可以把结果直接喂给透视表,或再用 XLOOKUP 反向查询原始列,实现全自动报表链路。若数据量突破十万行,请考虑迁移到 Power Query 或数据库,避免在本地打开时陷入漫长等待。
