move onto next iteration of loop in excel vba

◇◆丶佛笑我妖孽 提交于 2020-07-09 12:14:07

问题


I have a loop with several If statements in Excel VBA. This goes through and hides certain rows based on certain criteria. Basicially, if one of the statements is true then the row is hidden. Since only one of the statements has to be true for the row to be hidden it would be pointless for the rest of the statements to be tested once one of the statements is found to be true. How would I put in a line of code that would say to move onto the next iteration of the loop once the if statement is found to be true? Any help would be greatly appreciated!

For i = 1 To rng2.Rows.Count

    If Left(rng3.Cells(i, 1).Value, 8) = "CMS Part" Then
        If rng3.Cells(i, 1).Value <> "CMS Part D (CY " & Year(Date) & ")" Then
            rng3.Cells(i, 1).EntireRow.Hidden = True

        End If
    End If

    If rng4.Cells(i, 1).Value = "Yes" Then
        rng4.Cells(i, 1).EntireRow.Hidden = True

    End If

    If InStr(1, CStr(rng5.Cells(i, 1).Value), "test") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "Test") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "demo") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "Demo") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "TEST") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "DO NOT USE") > 0 Then
        rng5.Cells(i, 1).EntireRow.Hidden = True

    End If

Next i

回答1:


I know using goto statements is generally bad programming, but an option would be:

For i = 1 To rng2.Rows.Count

If Left(rng3.Cells(i, 1).Value, 8) = "CMS Part" Then
    If rng3.Cells(i, 1).Value <> "CMS Part D (CY " & Year(Date) & ")" Then
        rng3.Cells(i, 1).EntireRow.Hidden = True
        Goto Skip
    End If
End If

If rng4.Cells(i, 1).Value = "Yes" Then
    rng4.Cells(i, 1).EntireRow.Hidden = True
    Goto Skip
End If

If InStr(1, CStr(rng5.Cells(i, 1).Value), "test") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "Test") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "demo") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "Demo") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "TEST") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "DO NOT USE") > 0 Then
    rng5.Cells(i, 1).EntireRow.Hidden = True
    Goto Skip
End If

Skip: Next i



回答2:


I know others said it, but here is the code using elseif

For i = 1 To rng2.Rows.Count

    If Left(rng3.Cells(i, 1).Value, 8) = "CMS Part" Then
        If rng3.Cells(i, 1).Value <> "CMS Part D (CY " & Year(Date) & ")" Then
            rng3.Cells(i, 1).EntireRow.Hidden = True

        End If

    ElseIf rng4.Cells(i, 1).Value = "Yes" Then
        rng4.Cells(i, 1).EntireRow.Hidden = True

    ElseIf InStr(1, CStr(rng5.Cells(i, 1).Value), "test") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "Test") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "demo") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "Demo") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "TEST") > 0 Or InStr(1, CStr(rng5.Cells(i, 1).Value), "DO NOT USE") > 0 Then
        rng5.Cells(i, 1).EntireRow.Hidden = True

    End If

Next i


来源:https://stackoverflow.com/questions/28817051/move-onto-next-iteration-of-loop-in-excel-vba

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!