如何匹配Excel两工作表列值并复制对应数据到指定列
跨表匹配填充方案
方案1:内置公式实现(最优,无需编写代码)
该方案操作简单,适配绝大多数场景,直接在Sheet1的AK列操作即可:
- 点击Sheet1的AK2单元格(假设首行是表头,数据从第2行开始)
- 输入对应公式:
- 如果你用的是Excel 2021/365及以上版本,使用更简单的
XLOOKUP公式:=XLOOKUP(A2, Sheet2!C:C, Sheet2!W:W, "") - 如果你用的是更旧的Excel版本,使用兼容的
VLOOKUP公式:=IFERROR(VLOOKUP(A2, Sheet2!C:W, 21, FALSE), "")
- 如果你用的是Excel 2021/365及以上版本,使用更简单的
- 把AK2单元格的公式下拉填充到所有数据行即可。
公式说明:
- 匹配不到对应值时会返回空值,和你示例中B487的展示效果一致
- 如果你调整了列的位置,只需要对应修改公式里的列号即可
方案2:VBA脚本实现(适合十万行以上的大数据量场景)
如果数据量极大,公式计算卡顿,可以使用VBA脚本批量处理:
- 按
Alt+F11打开VBA编辑器 - 右键点击当前工作簿→插入→模块
- 把以下代码粘贴到模块中,按F5运行即可
Sub 匹配填充AK列() Dim sht1 As Worksheet, sht2 As Worksheet Dim matchDict As Object Dim lastRow1 As Long, lastRow2 As Long, i As Long Set sht1 = ThisWorkbook.Worksheets("Sheet1") Set sht2 = ThisWorkbook.Worksheets("Sheet2") Set matchDict = CreateObject("Scripting.Dictionary") ' 读取Sheet2的匹配关系存入字典 lastRow2 = sht2.Cells(sht2.Rows.Count, "C").End(xlUp).Row For i = 2 To lastRow2 If Not matchDict.Exists(sht2.Cells(i, "C").Value) Then matchDict(sht2.Cells(i, "C").Value) = sht2.Cells(i, "W").Value End If Next ' 填充Sheet1的AK列 lastRow1 = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow1 sht1.Cells(i, "AK").Value = IIf(matchDict.Exists(sht1.Cells(i, "A").Value), matchDict(sht1.Cells(i, "A").Value), "") Next ' 释放内存 Set matchDict = Nothing Set sht1 = Nothing Set sht2 = Nothing End Sub
内容的提问来源于stack exchange,提问作者Kate Bedrii
相关产品推荐
相关产品推荐

