在vlookup中用空格replace#N / A

我正在使用循环使用以下代码从另一个工作簿中的值更新一个工作簿中的值:

Option Explicit Sub DateFinder() Dim rw As Long, x As Range Dim extwbk As Workbook, twb As Workbook ' Turn off notifications Application.ScreenUpdating = False Set twb = ThisWorkbook Set extwbk = Workbooks.Open("C:\Test.xlsx") ' Refresh UsedRange (get rid of "Ghost" cells) Set x = extwbk.Worksheets("Sheet1").UsedRange With twb.Worksheets("Sheet1") For rw = 2 To .Cells(Rows.Count, "G").End(xlUp).Row .Cells(rw, "Q") = Application.VLookup(.Cells(rw, "G").Value2, 4, False) Next rw End With ' Close workbook extwbk.Close savechanges:=False ' Turn on screen updating Application.ScreenUpdating = True ' Message Box showing that process is complete. MsgBox "Done!" End Sub 

一切工作正常,但我想更改代码,以空白replace#N / A结果。 我search了这个网站,发现了下面的解决scheme,但是没有一个为我工作:

  .Cells(rw, "Q") = IfError(Application.VLookup(.Cells(rw, "G").Value2, x, 4, False), "") .Cells(rw, "Q") = "=IFERROR(Application.VLookup(.Cells(rw, "G").Value2, x, 4, False),"""",Application.VLookup(.Cells(rw, "G").Value2, x, 4, False))" .Cells(rw, "Q") = "=IF(ISNA(VLOOKUP(.Cells(rw, "G").Value2, x, 4, False)),"""",(VLOOKUP(.Cells(rw, "G").Value2, x, 4, False))) 

所有这三种解决scheme都会导致编译错误。 如果任何人都可以帮助我的是正确的公式,将是伟大的。 谢谢。

您可能需要将IfError限定为Application类的成员,请尝试:

 .Cells(rw, "Q") = Application.IfError(Application.VLookup(.Cells(rw, "G").Value2, 4, False), "") 

另一种方法是将Application.VLookup的结果分配给一个变体(否则types不匹配将在赋值时产生),然后检查错误。 这是如何使用IIFIsError函数来检查错误和错误的情况下转换为空string:

 Dim val As Variant val = Application.VLookup(.Cells(rw, "G").Value2, 4, False) .Cells(rw, "Q") = IIF(IsError(val),vbNullString,val) 

IfError环绕函数。 但是,在未来,而不是使用vlookup ,我build议索引匹配。 你可以在这里读到它:

https://www.deskbright.com/excel/using-index-match/

Index/Match是2个函数的组合,其结果比vlookup更好更容易。

另外,如果时间到了需要转置数据的地方,则需要使用hlookup而不是hlookup 。 索引匹配为您处理所有事情。