即使单元格公式返回值,在VBA中使用vLookUp调用IfError也会返回错误

时间:2016-07-06 09:11:30

标签: excel vba vlookup

我使用ifErrorvLookUp结合来查找大表中的值,并从特定列中提取一个值以放置在另一个工作表中的特定单元格中。< / p>

这是我目前用于从第D列开始从第D列开始绘制值的代码,将其放入另一个工作表的单元格B14中。

Sheet3.Range("B14").Value = Application.IfError(Application.VLookup(Sheet3.Range("B4"), Sheet2.Range("D5:CU530"), 9, False), "Not Found")

此代码返回&#34; Not Found&#34;为了我。

使用类似公式进行进一步测试但直接放入随机单元格会返回真值。以下是使用的公式。

=IFERROR(VLOOKUP(B4,'Sheet 2 Name'!D5:CU530,9,FALSE),"Not Found")

用于其他列(例如第2/3/4列)的相同vba代码(如第一个块引用中所示)返回真值而不是&#34; Not Found&#34;,即使目标单元格也是如此是表3的B14。

任何想法为什么?

编辑:更多信息 如果我在VBA中单独使用vLookUp(参见下面的代码),我可以获得真值,但我需要IfError,因为会出现没有找到值的情况。

 Application.VLookup(Sheet3.Range("B4"), Sheet2.Range("D5:CU530"), 9, False)

3 个答案:

答案 0 :(得分:0)

您可以在没有IfError的情况下执行if statement而不是Vlookup

x = Application.VLookup(Sheet3.Range("B4"), Sheet2.Range("D5:CU530"), 9, False)

If IsError(x) Then
    Sheet3.Range("B14").Value = "Not found"
Else
    Sheet3.Range("B14").Value = x
End If

答案 1 :(得分:0)

我认为错误可能在于vlookup部分,vlookup是一个更老的代码部分(即VB的旧版本),你可以在哪里,我真的鼓励使用索引匹配组合,因为它是更具体的内容(更有效率)!

以下是指向

的信息的链接

https://msdn.microsoft.com/en-us/library/office/ff197581.aspx

和匹配

https://msdn.microsoft.com/en-us/library/office/ff835873.aspx

希望这有帮助!

答案 2 :(得分:-1)

使用错误功能

On Error Resume Next

ws.Range("B14").Value = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(ws.Range("B2").Value, ws.Range("E:F"), 1, False), "No error")