Excel 如何在for循环中跳过N/A,同时保持原样并继续?
我正在我的代码中运行这个for循环,但是列AV中的一些单元格有#N/A,并且抛出了一个错误。到目前为止,其余的都做了我想做的,但如果它遇到了#N/A,它就会停止。我发现一些东西使用了Iferro和ISNA,但我不知道如何将其放入我的代码中。我只想忽略#N/A,移动到下一行,同时将#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
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
。谢谢!我先尝试了另一个答案,但仍因出错而停止。这一个刚好跳过他们,继续前进!完美的非常感谢你!非常感谢。我先尝试了另一个答案,但仍因出错而停止。这一个刚好跳过他们,继续前进!完美的非常感谢你!