Vlookup来自同一工作簿

时间:2018-03-14 18:53:10

标签: excel vba excel-vba vlookup

尝试从多个工作表中查找值。第一个代码正在运行。但IF FUNCTION的代码抛出错误 -

  

类型不匹配运行时错误13

在第一次查找后,对于E列中的所有#NA,我需要在第二张表中查找该值。

Sub Vlookup()

' Vlookup Macro

    Worksheets("ORD_CS").Activate
    Dim LR As Long
    LR = Worksheets("ORD_CS").UsedRange.Rows.Count
    Range("E2:E" & LR).Formula = Application.Vlookup(Range("M2:M" & LR), Worksheets("WSS").Range("A2:C999999"), 3, False)
    If Range("E2:E" & LR) = "" Then
       Range("E2:E" & LR) = Application.Vlookup(Range("M2:M" & LR), Worksheets("IBC").Range("C2:F999999"), 4, False)
    End If

End Sub

2 个答案:

答案 0 :(得分:0)

Vlookup的第一个参数必须是单个值,而不是范围

答案 1 :(得分:0)

首先,如@teylyn所述,Vlookup的第一个参数是单个值,而不是Range

第二次,您无法使用Range("E2:E" & LR).Formula,但在右侧使用Application.Vlookup。您有两个选择:

  1. 使用Value,例如Range("E2:E" & LR).Value = Application.Vlookup...

  2. 使用Formula,因此您需要修改右侧:Range("E2:E" & LR).Formula = "VLookup(..."公式字符串的其余部分。

  3. 第三次,如果Application.Vlookup无法找到匹配项,您需要捕获该方案,否则会引发错误。你可以使用:

    来做到这一点
    If Not IsError(Application.Vlookup(.Range("M" & i).Value, Worksheets("WSS").Range("A2:C999999"), 3, False)) Then
    

    请看下面的代码,我使用Value选项查看两张表。

    <强> 代码

    Option Explicit
    
    Sub Vlookup()
    
    ' Vlookup Macro
    Dim Sht As Worksheet
    Dim LR As Long, i As Long
    
    ' set the worksheet object
    Set Sht = ThisWorkbook.Worksheets("ORD_CS")
    
    With Sht
        LR = .Cells(.Rows.Count, "A").End(xlUp).Row
    
        For i = 2 To LR
            ' check that Vlookup succesfully found a match
            If Not IsError(Application.Vlookup(.Range("M" & i).Value, Worksheets("WSS").Range("A2:C999999"), 3, False)) Then
                .Range("E" & i).Value = Application.Vlookup(.Range("M" & i).Value, Worksheets("WSS").Range("A2:C999999"), 3, False)
            Else ' Vlookup error
                .Range("E" & i).Value = ""
            End If
        Next i
    
        ' second loop, for empty cells from previous VLookup >> check in the second sheet
        For i = 2 To LR
            If .Range("E" & i).Value = "" Then
                ' check that Vlookup succesfully found a match
                If Not IsError(Application.Vlookup(.Range("M" & i).Value, Worksheets("IBC").Range("C2:F999999"), 3, False)) Then
                    .Range("E" & i).Value = Application.Vlookup(.Range("M" & i).Value, Worksheets("IBC").Range("C2:F999999"), 3, False)
                Else ' Vlookup error >> raise an Error (like a log-file)
                    .Range("E" & i).Value = "Couldn't find Value in both sheets!"
                End If
            End If
        Next i
    
    End With
    
    End Sub