值班表、参赛名单、通讯录等,人员姓名分布在多行多列中。现在,你需要从这片“人海”里提取出一份不重复的名单那么,多行多列中提取名单有没有快速方法?答案是肯定的。本文教你用Excel 中的 UNIQUE 和 TOCOL 函数组合,一键将多行多列数据转换为一列,并自动去重,生成干净整洁的名单。

多行多列中提取名单应用场景有哪些?

常见的工作场景包括:

  • 值班安排表:多行多列记录每天值班人员,需要汇总所有参与人员

  • 活动签到表:多列签到记录,需要提取所有签到人

  • 学生选课名单:多门课程的选课名单分布在多列,需要统计所有选课学生

  • 销售团队名单:多个小组的人员名单混在一起,需要整合

掌握多行多列中提取名单的方法,可以帮你节省大量手动整理的时间。

核心方法:UNIQUE + TOCOL 组合拳

Excel 推出了两个强大的动态数组函数:TOCOL(将多列数据合并为一列)和 UNIQUE(提取不重复值)。二者结合,正是多行多列中提取名单的最佳拍档。

原始数据示例

假设你有如下值班表,人员姓名分布在 B2:D8 区域(多行多列),其中有些单元格是空的:

目标:提取所有不重复的人员姓名,放在 G2 开始的一列中。

公式写法

在 G2 单元格输入以下公式,按回车即可:

=UNIQUE(TOCOL(B2:D8, 1))
多行多列中提取名单怎么做?UNIQUE+TOCOL一键搞定不重复姓名-趣帮office教程网
多行多列中提取名单:UNIQUE + TOCOL 组合

公式原理解析

函数 作用 本例中含义
TOCOL(B2:D8, 1) 将多行多列区域转换为一列 把 B2:D8 中的所有姓名按行依次排成一列,并且忽略空白单元格(参数1表示忽略空白)
UNIQUE(...) 提取不重复的唯一值 对转换后的单列名单去重,只保留每个姓名第一次出现

结果:G列会动态生成一份不重复的名单,TOCOL 的第二参数 1 代表忽略空白单元格。如果使用 0 或省略,则空白单元格会显示为 0,影响去重效果。所以这里必须用 1。

进阶用法:按列扫描排序

TOCOL 函数默认是按行扫描(先扫描第一行所有列,再第二行...)。如果你想按列扫描(先扫描第一列所有行,再第二列...),可以设置第三参数为 TRUE

=UNIQUE(TOCOL(B2:D8, 1, TRUE))

例如,值班表按列排列(同一列是同一小组),你想保留小组顺序,就可以使用按列扫描。

多行多列中提取名单怎么做?UNIQUE+TOCOL一键搞定不重复姓名-趣帮office教程网
多行多列中提取名单进阶用法:按列扫描排序

兼容性:没有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:负责去重,只保留唯一值

掌握这一组合,你就能在几秒钟内完成原本需要手动复制粘贴、删除重复的繁琐工作,大大提升数据处理效率。

相关文章推荐:

用UNIQUE函数去重后,结尾总带个0?试试这3个组合公式解决

Excel多列去重就用Tocol+Unique组合函数,简单又高效