用vlookup中的空格替换#N / A.

时间:2017-06-20 15:29:56

标签: excel vba vlookup

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

    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

一切正常但我想更改代码以用空格替换#N / A结果。我搜索了网站,发现了以下解决方案,但没有一个能为我工作:

    .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)))

我得到了所有三种解决方案的编译错误。如果有人能帮助我使用正确的配方,这将是伟大的。谢谢。

2 个答案:

答案 0 :(得分:2)

您可能需要将IfError视为Application班级的成员,请尝试:

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

另一种方法是将Application.VLookup的结果分配给变量(否则,类型不匹配将在赋值时引发),然后检查错误。这是您使用IIFIsError函数检查错误的方法。如果出错,则转换为空字符串:

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

答案 1 :(得分:0)

使用IfError对函数进行环绕。但是,在将来而不是使用vlookup时,我建议使用Index-Match。你可以在这里阅读:

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

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

此外,如果您需要转置数据,则需要使用hlookup代替vlookup。 Index Match会为您处理一切。