【问题标题】:move onto next iteration of loop in excel vba进入excel vba中循环的下一次迭代
【发布时间】:2015-05-03 05:36:08
【问题描述】:

我在 Excel VBA 中有一个包含多个 If 语句的循环。这会根据某些条件遍历并隐藏某些行。基本上,如果其中一个语句为真,则该行被隐藏。由于只有一个语句必须为真才能隐藏行,因此一旦发现其中一个语句为真,测试其余语句将毫无意义。一旦发现 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

【问题讨论】:

  • 使用Select Case 构造,或使用IF .... ElseIf .... ElseIf... End If 构造
  • 这显然是If...ElseIf的情况; Select Case 在这里是个糟糕的选择。

标签: vba loops excel for-loop


【解决方案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

【讨论】:

  • 你可以通过使用类似“continue_0”的标签来提高它的可读性
  • 我会使用Skip: 作为标签名称。 GoTo 被用于弥补 VBA 中缺少 Continue 语句 - 我认为这是 GoTo 的少数合法用途之一。此外,循环体中的extracting methods 可以进一步提高可读性。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 2021-07-11
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多