如何用公式或VBA实现Sheet1与Sheet2多列匹配并同步数据至Sheet3?
解决方案:Excel 跨表匹配与行复制需求
一、公式实现步骤
1. 填充Sheet1的J列匹配结果
在Sheet1的J2单元格输入以下公式,下拉填充至所有数据行:
=IF(OR(E2=Sheet2!C2,F2=Sheet2!D2,G2=Sheet2!E2,H2=Sheet2!F2,I2=Sheet2!G2),Sheet2!H2,"")
该公式通过OR函数判断当前行E-I列与Sheet2对应行C-G列是否存在任意匹配单元格,匹配则返回Sheet2对应行H列内容,否则返回空值。
2. 将匹配行复制到Sheet3
方法1:手动筛选复制
- 选中Sheet1的J列,点击「数据」选项卡的「筛选」按钮
- 点击J列筛选箭头,取消勾选「空白」,选中所有可见行
- 复制选中行,粘贴到Sheet3的起始行(如A1)
方法2:数组公式自动提取
在Sheet3的A2单元格输入以下数组公式(输入完成后按Ctrl+Shift+Enter确认),横向拖动填充至所有列后下拉:
=INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$J:$J<>"",ROW(Sheet1!$J:$J)),ROW(A1)))
此公式会自动提取Sheet1中J列不为空的行,按顺序填充到Sheet3中。
二、VBA代码实现(一键完成所有操作)
按下Alt+F11打开VBA编辑器,插入新模块并粘贴以下代码:
Sub MatchAndCopyRows() Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet Dim lastRow1 As Long, lastRow3 As Long Dim i As Long ' 定义工作表对象 Set ws1 = ThisWorkbook.Sheets("Sheet1") Set ws2 = ThisWorkbook.Sheets("Sheet2") Set ws3 = ThisWorkbook.Sheets("Sheet3") ' 清空Sheet3原有数据(不需要可注释此行) ws3.Cells.Clear ' 获取Sheet1最后一行行号 lastRow1 = ws1.Cells(ws1.Rows.Count, "E").End(xlUp).Row ' 遍历数据行(假设第1行为表头,从第2行开始) For i = 2 To lastRow1 ' 判断是否存在匹配单元格 If ws1.Cells(i, "E") = ws2.Cells(i, "C") _ Or ws1.Cells(i, "F") = ws2.Cells(i, "D") _ Or ws1.Cells(i, "G") = ws2.Cells(i, "E") _ Or ws1.Cells(i, "H") = ws2.Cells(i, "F") _ Or ws1.Cells(i, "I") = ws2.Cells(i, "G") Then ' 写入Sheet2的H列内容到Sheet1的J列 ws1.Cells(i, "J") = ws2.Cells(i, "H") ' 复制当前行到Sheet3末尾 lastRow3 = ws3.Cells(ws3.Rows.Count, "A").End(xlUp).Row + 1 ws1.Rows(i).Copy Destination:=ws3.Rows(lastRow3) End If Next i MsgBox "匹配与复制操作已完成!" End Sub
代码说明
- 自动遍历Sheet1所有数据行,判断对应列的匹配情况
- 满足条件时自动填充Sheet1的J列,并将该行复制到Sheet3
- 若表头不是第1行,修改
For i = 2 To lastRow1中的起始行号即可
内容的提问来源于stack exchange,提问作者sipirili
相关产品推荐
相关产品推荐

