2017-04-25 35 views
0

我正在尝试在这里执行左侧查找。我知道我有一些无法找到的值,但我不明白为什么在循环中间弹出应用程序定义的错误或对象定义的错误。感谢您的帮助提前。左侧查找错误

With Sheet3 
x = 2 
Do Until IsEmpty(.Range("E" & x).value) 
look = .Range("E" & x).value 
result = WorksheetFunction.Index(Sheet2.Range("A:A"), 
WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0)) 
    If Not IsError(result) Then 
     .Range("F" & x).value = result 
    Else 
     .Range("F" & x).value = " " 
    End If 
    x = x + 1 
Loop 
End With 
+0

请注明“我明白,我不能找到一些值” –

+0

意味着一些值不能在VLOOKUP中找到,我想退货作为空白 –

+0

错误发生在什么单元格值? –

回答

0

在VBA中,如果一个Variant持有vbError值IsErrror函数返回true。即使此变量是变体,但未找到匹配时发生错误,该值也不会被分配给Result变量。您将不得不使用On Error Goto ...方法捕获该错误。

这不是什么大不了的事。你的代码可能看起来像这样。

Result = "" 
On Error Resume Next 
Result = WorksheetFunction.Index(Sheet2.Range("A:A"), _ 
     WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0)) 
.Range("F" & x).Value = Result 

如果出现错误,Result变量将保留之前的值。因此它在功能之前设置为“”。所以你不需要测试是否有错误。

在编写这段代码的过程中,我发现你也错过了Index函数换行符的下划线。

+0

此方法适用于vlookup,但为什么不适用于此? –

+0

它不适用于匹配。 – Variatus

+0

我感谢您的帮助! –

0

这个数组公式能完成这项工作吗?

=INDEX($B$1:$B$8,SMALL(IF($A$1:$A$8=$E$1,ROW($A$1:$A$8)),ROW‌​S($G$1:$G1))) 

它是行1至8