求助:仅针对特定值的跨工作表VBA VLOOKUP实现
仅针对特定值的跨工作表VBA VLOOKUP实现
看到你尝试用For循环、If语句来实现只在Sheet2中列值为De rediscutat的行执行VLOOKUP提取Sheet1数据,不过原来的代码有几个小问题需要调整:
- 直接判断整个
MyRange = "De rediscutat"是不对的,Range对象不能直接和字符串做整体判断,需要逐行检查 - 批量给Range赋值VLOOKUP公式时,要确保只针对符合条件的行,而不是整列赋值
下面是修正后的完整代码,我会逐段解释:
Sub VLookupForSpecificValue() Dim ws2 As Worksheet Dim ws1 As Worksheet Dim lastRow As Long Dim i As Long ' 设置工作表对象,避免使用Active相关的不稳定引用 Set ws2 = ThisWorkbook.Sheets("Sheet2") Set ws1 = ThisWorkbook.Sheets("Sheet1") ' 获取Sheet2中X列的最后一行,避免硬编码行号 lastRow = ws2.Cells(ws2.Rows.Count, "X").End(xlUp).Row ' 逐行检查X列的值 For i = 2 To lastRow ' 当X列当前行的值为"De rediscutat"时执行VLOOKUP If ws2.Cells(i, "X").Value = "De rediscutat" Then On Error Resume Next ' 处理VLOOKUP找不到匹配值的情况,避免代码中断 ws2.Cells(i, "N").Value = Application.WorksheetFunction.VLookup( _ ws2.Cells(i, "I").Value, _ ws1.Range("G2:M500"), _ 7, _ False _ ) On Error GoTo 0 ' 恢复错误处理 End If Next i End Sub
代码关键点说明:
- 用
ws1、ws2明确指定工作表,避免ActiveWorkbook或Worksheets的模糊引用,提升代码稳定性 - 自动获取X列最后一行
lastRow,不用硬编码800、694这类固定行号,适配数据行数变化 - 逐行遍历检查X列值,只对符合条件的行执行VLOOKUP
- 添加
On Error Resume Next和On Error GoTo 0,处理VLOOKUP找不到匹配值时的报错问题,防止代码中途停止
如果你希望后续数据更新时公式能自动计算,也可以选择给符合条件的行写入公式而非直接赋值结果,代码调整如下:
Sub VLookupFormulaForSpecificValue() Dim ws2 As Worksheet Dim ws1 As Worksheet Dim lastRow As Long Dim i As Long Set ws2 = ThisWorkbook.Sheets("Sheet2") Set ws1 = ThisWorkbook.Sheets("Sheet1") lastRow = ws2.Cells(ws2.Rows.Count, "X").End(xlUp).Row For i = 2 To lastRow If ws2.Cells(i, "X").Value = "De rediscutat" Then ws2.Cells(i, "N").Formula = "=VLOOKUP(" & ws2.Cells(i, "I").Address(False, False) & "," & _ ws1.Range("G2:M500").Address(True, True, xlExternal) & ",7,FALSE)" Else ws2.Cells(i, "N").ClearContents ' 不符合条件的行清空N列内容 End If Next i End Sub
内容的提问来源于stack exchange,提问作者VladB
相关产品推荐
相关产品推荐

