Excel 如何在for循环中跳过N/A,同时保持原样并继续?

Excel 如何在for循环中跳过N/A,同时保持原样并继续?,excel,vba,Excel,Vba,我正在我的代码中运行这个for循环,但是列AV中的一些单元格有#N/A,并且抛出了一个错误。到目前为止,其余的都做了我想做的,但如果它遇到了#N/A,它就会停止。我发现一些东西使用了Iferro和ISNA,但我不知道如何将其放入我的代码中。我只想忽略#N/A,移动到下一行,同时将#N/A保留在原来的位置。我只想跳过它并继续代码。用这个我怎么能做到呢 Dim lngRow As Long Dim lngRows As Long 'Find the last row in Column A lngR

我正在我的代码中运行这个for循环,但是列AV中的一些单元格有#N/A,并且抛出了一个错误。到目前为止,其余的都做了我想做的,但如果它遇到了#N/A,它就会停止。我发现一些东西使用了Iferro和ISNA,但我不知道如何将其放入我的代码中。我只想忽略#N/A,移动到下一行,同时将#N/A保留在原来的位置。我只想跳过它并继续代码。用这个我怎么能做到呢

Dim lngRow As Long
Dim lngRows As Long
'Find the last row in Column A
lngRows = Range("A" & Rows.Count).End(xlUp).Row

For lngRow = lngRows To 2 Step -1

        If (LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "lu" _
            Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "st" _
            Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "so") _
            And LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AU").Value) = "union" Then
            ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AW").Value = "MATCH"

        End If

Next
提前感谢您的帮助

添加错误测试:

Dim lngRow As Long
Dim lngRows As Long
'Find the last row in Column A
lngRows = Range("A" & Rows.Count).End(xlUp).Row

For lngRow = lngRows To 2 Step -1
    IF Not IsError(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV") Then

        If (LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "lu" _
            Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "st" _
            Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "so") _
            And LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AU").Value) = "union" Then
            ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AW").Value = "MATCH"

        End If
    End If
Next
添加错误测试:

Dim lngRow As Long
Dim lngRows As Long
'Find the last row in Column A
lngRows = Range("A" & Rows.Count).End(xlUp).Row

For lngRow = lngRows To 2 Step -1
    IF Not IsError(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV") Then

        If (LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "lu" _
            Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "st" _
            Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "so") _
            And LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AU").Value) = "union" Then
            ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AW").Value = "MATCH"

        End If
    End If
Next

我建议使用错误处理程序。如果发生错误,
On Error Goto
语句指示Excel跳转到其他代码行。使用它最简单的形式是:

Dim lngRow As Long
Dim lngRows As Long
Dim s as String

With ActiveWorkbook.Worksheets("SAP to ADP")
    'Find the last row in Column A
    lngRows = .Range("A" & .Rows.Count).End(xlUp).Row
    On Error Resume Next             
    For lngRow = lngRows To 2 Step -1
        s = ""
        s = LCase(.Cells(lngRow, "AV").Value)
        If (s = "lu" Or s = "st" Or s = "so") _
        And LCase(.Cells(lngRow, "AU").Value) = "union" Then
            .Cells(lngRow, "AW").Value = "MATCH"
        End If
    Next lngRow
    On Error Goto 0
End With
您的代码还有其他更改。首先,无需每次引用
ActiveWorkbook.worksheet(“SAP到ADP”)
时都取消引用它,因此在
块中使用它。
第二,计算结束行时有一个小错误。
范围
未在该工作表上明确引用,它可以是宏运行时处于活动状态的任何工作表。带有
块现在处理这个问题。
最后,如果中间值被多次使用,则存储它更经济,并且需要花费一次函数调用。它也使代码更具可读性。
编辑:

On Error Goto
语句激活错误处理例程。如果我们在这里使用它,则不会忽略第二个运行时错误。相反,在错误恢复下一行时使用
只会跳过下一行,可能会有问题。所有N/A字段现在都被忽略。

我建议使用错误处理程序。如果发生错误,
On Error Goto
语句指示Excel跳转到其他代码行。使用它最简单的形式是:

Dim lngRow As Long
Dim lngRows As Long
Dim s as String

With ActiveWorkbook.Worksheets("SAP to ADP")
    'Find the last row in Column A
    lngRows = .Range("A" & .Rows.Count).End(xlUp).Row
    On Error Resume Next             
    For lngRow = lngRows To 2 Step -1
        s = ""
        s = LCase(.Cells(lngRow, "AV").Value)
        If (s = "lu" Or s = "st" Or s = "so") _
        And LCase(.Cells(lngRow, "AU").Value) = "union" Then
            .Cells(lngRow, "AW").Value = "MATCH"
        End If
    Next lngRow
    On Error Goto 0
End With
您的代码还有其他更改。首先,无需每次引用
ActiveWorkbook.worksheet(“SAP到ADP”)
时都取消引用它,因此在
块中使用它。
第二,计算结束行时有一个小错误。
范围
未在该工作表上明确引用,它可以是宏运行时处于活动状态的任何工作表。带有
块现在处理这个问题。
最后,如果中间值被多次使用,则存储它更经济,并且需要花费一次函数调用。它也使代码更具可读性。
编辑:

On Error Goto
语句激活错误处理例程。如果我们在这里使用它,则不会忽略第二个运行时错误。相反,在错误恢复下一行时使用
只会跳过下一行,可能会有问题。现在将忽略所有N/A字段。

谢谢您的帮助。我喜欢你修改代码的方式,现在看起来好多了。不过我有个问题。代码可以正常工作,但在跳过一个“N/A”后,它会在下一个代码上出错,并表示类型不匹配。尽管我可以看出它已经跳过了一个。也许我只是在那个我不记得的单元格里输入了N/A。但是一旦它遇到错误,它就不会继续运行了…你也提到了中间值。这是你放进去的“s”值吗?我喜欢你这样做,只是想知道这是否是你的意思。你是对的,没有发现后续的运行时错误。我已经更改了代码,现在它将忽略所有错误。其中的优雅之处在于,您不必更改操作代码本身,只需添加
On Error
语句。是的,从表中读取的值(小写)被多次使用,因此被分配给变量
s
。感谢您的帮助。我喜欢你修改代码的方式,现在看起来好多了。不过我有个问题。代码可以正常工作,但在跳过一个“N/A”后,它会在下一个代码上出错,并表示类型不匹配。尽管我可以看出它已经跳过了一个。也许我只是在那个我不记得的单元格里输入了N/A。但是一旦它遇到错误,它就不会继续运行了…你也提到了中间值。这是你放进去的“s”值吗?我喜欢你这样做,只是想知道这是否是你的意思。你是对的,没有发现后续的运行时错误。我已经更改了代码,现在它将忽略所有错误。其中的优雅之处在于,您不必更改操作代码本身,只需添加
On Error
语句。是的,从表中读取的值,小写,被多次使用,因此分配给变量
s
。谢谢!我先尝试了另一个答案,但仍因出错而停止。这一个刚好跳过他们,继续前进!完美的非常感谢你!非常感谢。我先尝试了另一个答案,但仍因出错而停止。这一个刚好跳过他们,继续前进!完美的非常感谢你!