You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:仅针对特定值的跨工作表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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:54:07