值班表、参赛名单、通讯录等,人员姓名分布在多行多列中。现在,你需要从这片“人海”里提取出一份不重复的名单。那么,多行多列中提取名单有没有快速方法?答案是肯定的。本文教你用Excel 中的 UNIQUE 和 TOCOL 函数组合,一键将多行多列数据转换为一列,并自动去重,生成干净整洁的名单。
多行多列中提取名单应用场景有哪些?
常见的工作场景包括:
-
值班安排表:多行多列记录每天值班人员,需要汇总所有参与人员
-
活动签到表:多列签到记录,需要提取所有签到人
-
学生选课名单:多门课程的选课名单分布在多列,需要统计所有选课学生
-
销售团队名单:多个小组的人员名单混在一起,需要整合
掌握多行多列中提取名单的方法,可以帮你节省大量手动整理的时间。
核心方法:UNIQUE + TOCOL 组合拳
Excel 推出了两个强大的动态数组函数:TOCOL(将多列数据合并为一列)和 UNIQUE(提取不重复值)。二者结合,正是多行多列中提取名单的最佳拍档。
原始数据示例
假设你有如下值班表,人员姓名分布在 B2:D8 区域(多行多列),其中有些单元格是空的:
目标:提取所有不重复的人员姓名,放在 G2 开始的一列中。
公式写法
在 G2 单元格输入以下公式,按回车即可:
=UNIQUE(TOCOL(B2:D8, 1))

公式原理解析
| 函数 | 作用 | 本例中含义 |
|---|---|---|
TOCOL(B2:D8, 1) |
将多行多列区域转换为一列 | 把 B2:D8 中的所有姓名按行依次排成一列,并且忽略空白单元格(参数1表示忽略空白) |
UNIQUE(...) |
提取不重复的唯一值 | 对转换后的单列名单去重,只保留每个姓名第一次出现 |
结果:G列会动态生成一份不重复的名单,TOCOL 的第二参数 1 代表忽略空白单元格。如果使用 0 或省略,则空白单元格会显示为 0,影响去重效果。所以这里必须用 1。
进阶用法:按列扫描排序
TOCOL 函数默认是按行扫描(先扫描第一行所有列,再第二行...)。如果你想按列扫描(先扫描第一列所有行,再第二列...),可以设置第三参数为 TRUE。
=UNIQUE(TOCOL(B2:D8, 1, TRUE))
例如,值班表按列排列(同一列是同一小组),你想保留小组顺序,就可以使用按列扫描。

兼容性:没有TOCOL和UNIQUE怎么办?
如果你的 Excel 版本较旧(2019 及以前),没有 TOCOL 和 UNIQUE 函数,可以使用以下传统方法实现多行多列中提取名单:
Power Query(推荐)
1、选中数据区域 → 【数据】→【从表格/区域】
2、在 Power Query 编辑器中,选中所有列 → 【转换】→【逆透视列】
3、删除属性列 → 选择值列 → 【主页】→【删除重复项】
4、【关闭并上载】
常见问题解答
问题1:我的Excel没有TOCOL和UNIQUE函数怎么办?
答:这两个函数仅适用于 Excel 365 和 Excel 2021(部分版本) 以及最新版 WPS。如果你使用的是 Excel 2019 或更早版本,请使用上述的传统方法(Power Query 或 VBA)。
问题2:为什么我的TOCOL结果中出现了0?
答:这是因为 TOCOL 的第二参数没有正确设置。如果你使用 TOCOL(B2:D8) 而省略了第二参数,空白单元格会被转换成 0。请务必使用 TOCOL(B2:D8, 1),其中 1 表示忽略空白单元格。
问题3:我想提取名单后,还要按姓名拼音排序,怎么做?
答:可以在公式外层再套一个 SORT 函数。例如:=SORT(UNIQUE(TOCOL(B2:D8,1)))。这样生成的名单会自动按拼音或字母顺序升序排列。如果需要降序,用 SORT(..., , -1)。
总结
多行多列中提取名单不再是难题。Excel 用户只需记住这个万能公式:
=UNIQUE(TOCOL(数据区域, 1))
-
TOCOL:负责“拉直”多行多列数据,忽略空白 -
UNIQUE:负责去重,只保留唯一值
掌握这一组合,你就能在几秒钟内完成原本需要手动复制粘贴、删除重复的繁琐工作,大大提升数据处理效率。
评论 (0)