如何匹配sheet1与sheet2的A列值并将sheet2对应行替换到sheet1
按两表A列匹配实现整行覆盖的操作方案
核心需求:以Sheet1、Sheet2的A列值为匹配依据,当两列对应值相等时,将Sheet2匹配行的整行数据覆盖写入Sheet1对应匹配值的行位置。
方法1:函数实现(适合无代码基础的普通用户,Excel 2021/365、WPS 2021及以上版本通用)
- 选中Sheet1中B列第一个需要填充数据的单元格(例如表头在第一行的话就选B2)
- 输入公式:
=XLOOKUP($A2,Sheet2!$A:$A,Sheet2!B:B,"") - 按住单元格右下角的填充柄,向右拉动到需要覆盖的所有列,再向下拉动到Sheet1所有数据行,即可自动填充匹配到的内容
- 若需要把公式转为固定值避免后续修改,全选填充后的区域,右键选择「粘贴选项」-「值」即可完成最终覆盖
方法2:VBA脚本实现(适合批量、高频操作场景,全版本Excel、WPS通用)
- 打开目标Excel文件,按下
Alt + F11调出VBA编辑器 - 右键点击左侧面板中你的工作簿名称,依次选择「插入」-「模块」
- 将如下代码粘贴到弹出的代码编辑窗口中:
Sub 按A列匹配覆盖行数据() Dim ws1 As Worksheet, ws2 As Worksheet Dim i As Long, j As Long, lastRow1 As Long, lastRow2 As Long ' 下方工作表名可修改为你的实际表名 Set ws1 = ThisWorkbook.Worksheets("Sheet1") Set ws2 = ThisWorkbook.Worksheets("Sheet2") ' 获取两个表A列的最后一行数据位置 lastRow1 = ws1.Cells(Rows.Count, "A").End(xlUp).Row lastRow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row ' 关闭屏幕刷新提升运行速度 Application.ScreenUpdating = False ' 双层遍历匹配A列值 For i = 1 To lastRow1 For j = 1 To lastRow2 If ws1.Cells(i, "A").Value = ws2.Cells(j, "A").Value Then ' 匹配成功则整行复制覆盖 ws2.Rows(j).Copy Destination:=ws1.Rows(i) Exit For End If Next j Next i Application.ScreenUpdating = True MsgBox "匹配覆盖操作已完成" End Sub
- 按下
F5运行脚本即可自动完成全部匹配覆盖操作,WPS用户需要提前开启宏功能即可正常使用
小提示:如果你的A列有数值格式和文本格式不统一导致匹配失败的情况,可先把两表A列的单元格格式统一为同一类型再操作。
内容的提问来源于stack exchange,提问作者Marcin Greń
相关产品推荐
相关产品推荐

