问题场景
- 查找匹配并返回多列数据,例如:将某个部门所涉及的相关列的数据从【全员数据源】中整理出来,并按照一定顺序,然后发送给各部门的负责人。
场景
-
从【全员数据源】中共23列数据,整理出【测试部门人员明细表】相关的8列数据。
注:现实中可能从上千列数据元中匹配出某些特定人员相关的上百列数据
-
包含:人员姓名、评分、任务数量、应出勤天数、打卡天数、出勤时长、请假天数、补卡次数,共8列;
-
按照上述顺序整合数据;
-
目标
- 按要求整理出测试部门的明细数据并重新排名发给测试部门负责人。
解决方案
用VLOOKUP函数和Match函数实现
- MATCH函数解释:
=MATCH(lookup_value, lookup_array, [match_type])
#返回列表中某个值的位置#lookup_value必需参数,需要在 lookup_array 中查找的值;
#lookup_array必需参数,要查找的区域;
#match_type可选参数,数字 -1、0 或 1。这里只说0的情况:表示MATCH 函数会查找等于 lookup_value 的第一个值。lookup_array 参数中的值可以按任何顺序排列;
#VLOOKUP函数详情可看VLOOKUP第一节;
-
第一步:新建sheet页重命名为【测试部人员明细表】,再将人员姓名、评分、任务数量、应出勤天数、打卡天数、出勤时长、请假天数、补卡次数按要求的顺序放在表头。
-
注意:【测试部人员明细表】每列的表头内容一定要跟【全员数据源】表头每个单元格内容一致,否则引用参数不正确查找不到,会返回错误值:#N/A。
-
第二步:在【全员数据源】表中筛选出测试部的人员名单并复制到【测试部人员明细表】
-
- windows筛选快捷键:ctrl+shift+L,取消筛选再按一次ctrl+shift+L。
-
第三步:在【测试部人员明细表】中选中要填充的单元格(示例填充区域是B2至H11区域),单击B2单元格英文状态下输入:=VLOOKUP($A2,全员数据源!$A:$X,MATCH(B$1,全员数据源!$A$1:$X$1,0),0)。
-
MATCH(B$1,全员数据源!$A$1:$X$1,0)公式解释:
-
-
B$1:查找值为【测试部人员明细表】中B1单元格的值【评分】,相对引用,也就是查找的是表头B1至H1的内容;
-
全员数据源!$A$1:$X$1:查找区域为【全员数据源】的A1至X1的表头内容;
-
0:返回查找值在【全员数据源】的所在位置,也就是在第几列,作为VLOOKUP函数的第三个参数,也就是返回值。
-
-
VLOOKUP($A2,全员数据源!$A:$X,MATCH(B$1,全员数据源!$A$1:$X$1,0),0)公式解释:
-
-
$A2:查找值为【测试部人员明细表】中的A2单元格的值,也就是姓名列;
-
全员数据源!$A:$X:查找区域为【全员数据源】;
-
MATCH(B$1,全员数据源!$A$1:$X$1,0):VLOOKUP函数的返回值,返回MATCH函数所查找到值的所在位置。
-
0:精确查找。
-
- 第四步:再同时Ctrl+Enter填充数据,最后结果为:
- 第五步:进行核对。
总结
- 实际业务场景复杂时,如果不能一次性解决问题,可择优或结合使用,多尝试,办法总比困难多。