【问题标题】:For loop: skip value when error occursFor循环:发生错误时跳过值
【发布时间】:2026-02-06 23:20:10
【问题描述】:

我在 Sheet3 上有一个表格,在 Sheet2 上有一个引用列表,它引用了 Sheet3 上的表格数据,Sheet2 上的引用与 Sheet3 上的表格中的引用顺序不同。我目前正在使用 VLOOKUP 命令在 Sheet3 上搜索相应的引用并填充 Sheet2 上的列,因此列表很长,因此我使用了一个 for 循环来遍历所有行并应用 VLOOKUP 命令,如下所示: 将 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 行上很混乱,我应该真正使用变量,但这样我更容易阅读这些语句,因为我在 1 页上有很多相似的语句。

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

【问题讨论】:

    标签: vba excel for-loop


    【解决方案1】:

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

    是的。使用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 部分用结果值重写单元格中的公式。

    【讨论】: