如何通过公式或宏匹配Excel跨表列,批量填充目标列对应值
Excel双条件跨表匹配填充方案
公式方案(无需启用宏,适合大多数场景)
全版本兼容方案(INDEX+MATCH组合)
在目标表Sheet2的N2单元格输入如下公式,Excel 2019及更早版本输入后按Ctrl+Shift+Enter触发数组运算,Excel 365/2021版本直接回车即可,之后下拉填充整列:=IFERROR(INDEX(Sheet1!$N:$N,MATCH(1,(Sheet1!$C:$C=C2)*(Sheet1!$K:$K=K2),0)),"无匹配")
公式逻辑:用C列+K列的组合作为匹配条件,定位Sheet1中符合条件的行,返回对应行N列的数值,匹配不到时返回“无匹配”。
针对你给出的模拟数据,调整后的公式为(匹配Item_code和Item_id,填充Item_name):=IFERROR(INDEX(Sheet1!$C:$C,MATCH(1,(Sheet1!$A:$A=A2)*(Sheet1!$B:$B=B2),0)),"无匹配")
Excel 365专属简化方案(XLOOKUP)
365版本可直接使用更简洁的XLOOKUP公式,无需数组运算:=XLOOKUP(C2&K2,Sheet1!$C:$C&Sheet1!$K:$K,Sheet1!$N:$N,"无匹配",0)
模拟数据适配公式:=XLOOKUP(A2&B2,Sheet1!$A:$A&Sheet1!$B:$B,Sheet1!$C:$C,"无匹配",0)
VBA宏方案(适合十万行以上大体积数据,避免公式卡顿)
如果数据量极大公式运行卡顿,可以使用宏方案,操作步骤如下:
- 按
Alt+F11打开VBA编辑器 - 右键点击当前工作簿名称,选择「插入」-「模块」
- 将下方代码粘贴到模块中,按需修改列标后点击运行即可
Sub 双条件跨表填充() Dim wsSource As Worksheet, wsTarget As Worksheet Dim dict As Object, i As Long, key As String ' 定义源表和目标表,可按需修改表名 Set wsSource = ThisWorkbook.Worksheets("Sheet1") Set wsTarget = ThisWorkbook.Worksheets("Sheet2") Set dict = CreateObject("Scripting.Dictionary") ' 读取源表数据存入字典 For i = 2 To wsSource.Cells(Rows.Count, "C").End(xlUp).Row ' 组合C列+K列作为唯一匹配键 key = wsSource.Range("C" & i).Value & "|" & wsSource.Range("K" & i).Value If Not dict.exists(key) Then dict(key) = wsSource.Range("N" & i).Value End If Next i ' 匹配填充目标表 For i = 2 To wsTarget.Cells(Rows.Count, "C").End(xlUp).Row key = wsTarget.Range("C" & i).Value & "|" & wsTarget.Range("K" & i).Value wsTarget.Range("N" & i).Value = IIf(dict.exists(key), dict(key), "无匹配") Next i ' 释放对象 Set dict = Nothing: Set wsSource = Nothing: Set wsTarget = Nothing MsgBox "填充完成" End Sub
注意:如果是模拟数据场景,将代码中的C列修改为A列、K列修改为B列、N列修改为C列即可运行。
内容的提问来源于stack exchange,提问作者goldenbutter
相关产品推荐
相关产品推荐

