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
的结果分配给变量(否则,分配时会出现类型不匹配),然后检查错误。这就是如何使用andiError
函数检查错误并在出现错误时转换为空字符串的方法:
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”时,我收到的错误就在代码行上。下面提供了解决方案。谢谢,干杯。从我的角度来看,第二次和第三次尝试显然是错误的,而勒苏·德夫的回答针对的是第一次:)