如何使用VLOOKUP匹配两张不同表格的数据并填充对应课程日期
解决方案
下面分不同使用场景给出最简便的实现方法:
方法1:Excel/WPS 表格(零代码,普通用户首选)
用XLOOKUP多条件匹配即可快速完成:
- 先给第一张表命名为「学习记录表」,第二张表命名为「待填充表」
- 假设待填充表的ID在A列、姓名在B列、CourseA在C列、CourseB在D列,学习记录表的ID在A列、姓名在B列、课程名称在C列、课程日期在D列
- 选中待填充表C2单元格,输入公式:
=XLOOKUP(A2&B2&"CourseA", 学习记录表!A:A&学习记录表!B:B&学习记录表!C:C, 学习记录表!D:D, "无学习记录") - 回车后下拉填充整列,CourseB列只需把公式里的
"CourseA"改成"CourseB"重新填充即可
老版本无
XLOOKUP的Excel可以用INDEX+MATCH组合实现:
输入=INDEX(学习记录表!D:D,MATCH(A2&B2&"CourseA",学习记录表!A:A&学习记录表!B:B&学习记录表!C:C,0))后按Ctrl+Shift+Enter数组回车生效,找不到记录会返回#N/A,可自行嵌套IFERROR处理异常值
方法2:Python Pandas(数据量超10万行时使用)
几行代码批量处理,逻辑是先把长表转宽表再关联:
import pandas as pd # 读取两张表 df_record = pd.read_excel("学习记录表.xlsx") df_empty = pd.read_excel("待填充表.xlsx") # 长表转宽表,课程名转为列,值为对应日期 df_pivot = df_record.pivot(index=["ID", "姓名"], columns="课程名称", values="课程日期").reset_index() # 关联到待填充表,输出结果 df_result = df_empty[["ID", "姓名"]].merge(df_pivot[["ID", "姓名", "CourseA", "CourseB"]], on=["ID", "姓名"], how="left") df_result.to_excel("填充完成表.xlsx", index=False)
方法3:SQL(数据存储在数据库时使用)
用条件聚合+左关联即可查询出结果:
SELECT t2.ID, t2.姓名, MAX(CASE WHEN t1.课程名称 = 'CourseA' THEN t1.课程日期 END) AS CourseA, MAX(CASE WHEN t1.课程名称 = 'CourseB' THEN t1.课程日期 END) AS CourseB FROM 待填充表 t2 LEFT JOIN 学习记录表 t1 ON t2.ID = t1.ID AND t2.姓名 = t1.姓名 GROUP BY t2.ID, t2.姓名
内容的提问来源于stack exchange,提问作者Bruno Tavares
相关产品推荐
相关产品推荐

