王小二需要准备一份部门员工清单报表给部门经理,明天就要交!这份部门员工清单报表不仅要按部门统计所有员工姓名,还要实现一对多匹配的完整显示,如果只用VLOOKUP方法的话,只能返回第一个匹配结果。所以今天我们要解决的问题是:如何使用函数公式对部门员工数据进行一对多匹配分析。
我们的部门员工数据表

我们的分析需求
-根据部门名称查找匹配所有对应员工
-一次性显示一个部门的所有员工姓名
-横向排列显示匹配结果
-避免重复显示和错误值
-一步完成一对多匹配,不需要复杂的多步骤操作
我们要得到如下的最终结果:

有想要自己实际操作的朋友可以将下面的表格复制到自己的表格中,示例表格放在我们文章的最后面了,在任意单元格中输入公式:
=TRANSPOSE(FILTER(B:B,E2=A:A))
就可以得到我们想要的结果了
接下来我们步入函数的工厂世界,像流水线一样的看一下公式是怎么发挥作用的!
原始数据输入,就相当于是我们的原材料

FILTER函数接收数据开始工作
FILTER函数就像一个智能的数据筛选器,他能够根据指定的条件筛选出所有符合要求的数据。
语法结构: FILTER(要返回的数据, 筛选条件, [无结果时的返回值])

参数一: 要返回的数据
作用: 指定需要返回的数据列
小王的例子: B:B代表员工姓名列,FILTER会从这一列中提取符合条件的数据
传递链: 筛选结果将传递给TRANSPOSE函数进行转置

参数二: 筛选条件
作用: 指定筛选的标准
在本例子中:E2=A:A表示筛选出部门列中等于E2单元格内容的所有行
传递链: 筛选条件决定哪些数据会被保留

参数三: 无结果时的返回值(可选)
作用: 指定当没有找到匹配数据时的返回值
在本例子中: 可以设置为"无数据"或留空
具体的处理过程: FILTER(B:B,E2=A:A)
FILTER函数开始从A1单元格开始扫描,A1单元格为序号,不等于E2单元格的内容市场部,结果过滤掉A1单元格
接着扫描到A2单元格,A2单元格为市场部,等于E2单元格的内容市场部,结果保留A2单元格。
具体的扫描过程如下图所示:

最终的筛选结果为: {"小乔";"吕布";"典韦"}

统计的结果: FILTER函数的结果就是{"小乔";"吕布";"典韦"},我们理解并且记住这个结果就行,一会在TRANSPOSE函数中会继续出现,就代表它的结果是{"小乔";"吕布";"典韦"}。
TRANSPOSE函数开始工作
TRANSPOSE函数就像一个数据旋转器,他能够将垂直方向的数据转换为水平方向显示。
语法结构: TRANSPOSE(要转置的数据)

参数: 要转置的数据
作用: 指定需要转换方向的数据范围
在本例子中: FILTER函数的结果{"小乔";"吕布";"典韦"}将被转换为水平显示传递链: 转换后的数据将直接输出到单元格
处理过程: =TRANSPOSE(FILTER(B:B,A:A=D2))
转换前

转换后

数据转置结果: {"小乔","吕布","典韦"}
统计的结果: TRANSPOSE函数的结果就是{"小乔","吕布","典韦"},这就是我们最终需要的水平排列数据。
接着将公式向下拖动,就可以快速得到我们想要的结果了。

如果说你是一名人力资源数据分析师,需要为公司各部门制作员工清单,传统方法需要创建复杂的辅助列和多步骤操作,现在只需要一个公式就能搞定!FILTER函数配合TRANSPOSE函数,能够一次性获取所有匹配结果,大大提升了工作效率!
示例数据表格如下
部门 | 员工姓名 | 职位 |
市场部 | 小乔 | 专员 |
销售部 | 张飞 | 经理 |
市场部 | 吕布 | 主管 |
技术部 | 关羽 | 工程师 |
销售部 | 赵云 | 专员 |
市场部 | 典韦 | 经理 |
技术部 | 马超 | 开发 |