尝试从多个工作表中查找值。第一个代码正在运行。但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
答案 0 :(得分:0)
Vlookup的第一个参数必须是单个值,而不是范围
答案 1 :(得分:0)
首先,如@teylyn所述,Vlookup
的第一个参数是单个值,而不是Range
。
第二次,您无法使用Range("E2:E" & LR).Formula
,但在右侧使用Application.Vlookup
。您有两个选择:
使用Value
,例如Range("E2:E" & LR).Value = Application.Vlookup...
使用Formula
,因此您需要修改右侧:Range("E2:E" & LR).Formula = "VLookup(..."
公式字符串的其余部分。
第三次,如果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