我在Sheet3上有一个表,Sheet2上有一个引用列表,它引用Sheet3上的表数据,Sheet2上的引用与Sheet3上表中的引用的顺序不同。我目前正在使用VLOOKUP命令在Sheet3上搜索相应的引用并填充Sheet2上的列,列表很长,因此我使用了一个遍历所有行的for循环并应用VLOOKUP命令,如下所示: D Y作为整数
Y = 2
For Y = 1 To 108
Worksheets(2).Range("C" & Y).Value = Application.WorksheetFunction.VLookup(ActiveWorkbook.Sheets(2).Range("A" & Y), ActiveWorkbook.Sheets(3).Range("A2:B113"), 2, False)
Next Y
注意:我理解让一行上的所有内容都很乱,我应该使用变量,但这样我就更容易阅读这些语句,因为我有很多类似于1页的内容。
现在我的问题是Sheet2上显示的一些参考数字在Sheet2上缺失,对于这些参考数字,我得到了一个错误并调试了我的VLOOKUP语句的弹出窗口,因此有什么方法可以通过循环正常,但一旦遇到这些缺失值只是跳过它们,然后进入下一个?我的意思是如果发生错误跳过Y?
答案 0 :(得分:0)
有没有什么方法可以像往常一样经历循环但是一旦遇到这些缺失的值就跳过它们然后继续下一个?
是的。使用IsError
功能:
Dim res
Y = 2
For Y = 1 To 108
res = Application.VLookup(ActiveWorkbook.Sheets(2).Range("A" & Y), ActiveWorkbook.Sheets(3).Range("A2:B113"), 2, False)
If Not IsError(res) Then
Worksheets(2).Range("C" & Y).Value = res
End If
Next Y
另一种方法(没有循环 - 更有效的方式)就是使用这样的东西:
With ActiveWorkbook.Worksheets(2).Range("C1:C108")
.Formula = "=IFERROR(VLOOKUP(A1,'" & ActiveWorkbook.Worksheets(3).Name & "'!$A$2:$B$113,2,0),"""")"
.Value = .Value
End With
在此方法中,如果VLOOKUP
返回#N/A
,则单元格将为空。部分.Value = .Value
会在单元格中重新显示其结果值的公式。