Vba For循环:发生错误时跳过值

Vba For循环:发生错误时跳过值,vba,excel,for-loop,Vba,Excel,For Loop,我在第3页上有一个表,在第2页上有一个参考列表,其中参考了第3页上的表数据,第2页上的参考与第3页上的表中的参考顺序不同。我目前正在使用VLOOKUP命令搜索Sheet3上的相应引用并填充Sheet2上的列,列表很长,因此我使用了一个for循环,它遍历所有行并应用VLOOKUP命令,如图所示: Dim Y作为整数 Y = 2 For Y = 1 To 108 Worksheets(2).Range("C" & Y).Value = Application.WorksheetFunctio

我在第3页上有一个表,在第2页上有一个参考列表,其中参考了第3页上的表数据,第2页上的参考与第3页上的表中的参考顺序不同。我目前正在使用VLOOKUP命令搜索Sheet3上的相应引用并填充Sheet2上的列,列表很长,因此我使用了一个for循环,它遍历所有行并应用VLOOKUP命令,如图所示: Dim 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
注意:我理解在一行上的所有内容都是混乱的,我应该使用变量,但这样我更容易阅读语句,因为我在一页上有很多类似的语句

现在我的问题是,Sheet1上显示的一些参考号在Sheet2上丢失了,对于这些参考号,我的VLOOKUP语句会出现一个错误和调试弹出窗口。因此,有没有任何方法可以让我像平常一样通过循环,但一旦遇到这些丢失的值,就跳过它们,进入下一个循环?我的意思是,如果发生错误,跳过Y

有没有什么方法可以让我像平常一样通过循环,但一旦遇到这些缺失的值,就跳过它们,进入下一个循环

是的。使用iError的
功能:

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
,则单元格将为空。Part
.Value=.Value
使用结果值重写单元格中的公式