转到excel vba中的下一个循环迭代

时间:2015-03-02 18:39:06

标签: excel vba loops excel-vba for-loop

我在Excel VBA中有一个包含多个If语句的循环。这会根据某些标准进行并隐藏某些行。基本上,如果其中一个语句为真,则隐藏该行。由于只有一个语句对于要隐藏的行必须为true,因此一旦发现其中一个语句为真,则对其余语句进行测试将毫无意义。一旦if语句被发现为真,我将如何放入一行代码来表示转到循环的下一次迭代?任何帮助将不胜感激!

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

2 个答案:

答案 0 :(得分:1)

我知道使用goto语句通常是错误的编程,但选项是:

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

答案 1 :(得分:0)

我知道其他人说过,但这是使用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