Excel 用vlookup中的空格替换不适用

Excel 用vlookup中的空格替换不适用,excel,vba,vlookup,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

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

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

这三种解决方案都出现编译错误。如果有人能帮我找到正确的配方,那就太好了。谢谢

您可能需要符合
IfError
作为
应用程序
类成员的资格,请尝试:

.Cells(rw, "Q") = Application.IfError(Application.VLookup(.Cells(rw, "G").Value2, 4, False), "")
另一种方法是将
Application.VLookup
的结果分配给变量(否则,分配时会出现类型不匹配),然后检查错误。这就是如何使用and
iError
函数检查错误并在出现错误时转换为空字符串的方法:

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

IfError
环绕该功能。但是,在将来,我建议使用索引匹配,而不是使用
vlookup
。您可以在此处阅读:

Index/Match
是两个函数的组合,它们的净结果比
vlookup
更好、更简单


此外,如果需要转置数据,则需要使用
hlookup
而不是
vlookup
。索引匹配为您处理一切

我不认为OP能让它工作<代码>应用程序应该是
工作表功能
,否?是的,
应用程序。工作表功能
!奇怪-如果我尝试这样做,就会出现“无法获取WorksheetFunction类的Vlookup属性”错误。
Application.Vlookup
应该是有效的。不同之处在于
应用程序
版本的
Vlookup
可以返回错误而不会引发错误。作为工作表类成员的
Vlookup
必须引发错误。2010,我没有任何异常或异常引用处于活动状态。OP的编译错误可能是您的答案应该解决的
IfError
。您可以链接多个工作表。然后粘贴特殊值。或者,您可以使用间接链接,将一些包含文件路径的单元格连接在一起。这样,一切都可以更新。我知道。但你会得到同样的结果。你怎么用空白来代替它们(这是OP问题!!!)哦,我有点困惑。在它周围围一圈。但一般来说,你应该使用索引匹配。编辑我的回复!我使用
偏移量(匹配(…)…)
,但是我也使用
VLOOKUP
。Vlooop更简单,而且可以满足很多次。Matt,编译错误具体指向什么?错误消息是什么?在三次尝试中,第二次尝试肯定会失败,因为您将公式字符串文字与VBA对象引用混合,这不会引发“编译”错误,但肯定会引发1004运行时错误。Dave,在我三次尝试替换我在原始帖子底部提供的“N/A”时,我收到的错误就在代码行上。下面提供了解决方案。谢谢,干杯。从我的角度来看,第二次和第三次尝试显然是错误的,而勒苏·德夫的回答针对的是第一次:)