2015-03-02 42 views
1

我在Excel VBA中有几个If语句的循环。这通过并且基于特定标准隐藏某些行。基本上,如果其中一个陈述是真的,那么该行是隐藏的。由于只有一个陈述必须是真的才能隐藏行,所以当其中一个陈述被发现是真实的时候,其余的陈述将被测试是毫无意义的。一旦if语句被发现是真的,我将如何放入一行代码,这些代码可以说移动到循环的下一个迭代中?任何帮助将不胜感激!在excel vba中转到循环的下一个迭代

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

使用代码或者使用'Select Case'构造,或者使用'IF .... ElseIf .... ElseIf ... End If'构造 – tigeravatar 2015-03-02 18:43:59

+0

这显然是'If ... ElseIf'的情况; 'Select Case'在这里将是一个不错的选择。 – 2015-03-02 19:08:34

回答

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 
+3

您可以使用诸如“continue_0”之类的标签来提高可读性 – Seb 2015-03-02 18:59:37

+1

我会使用Skip:作为标签名称。 'GoTo'被用来弥补VBA中缺乏'Continue'语句 - 我认为这是'GoTo'少数合法用途之一。此外,循环体中的[提取方法](http://github.com/retailcoder/Rubberduck/wiki/Features#refactorings)可以进一步提高可读性。 – 2015-03-02 19:06:31

+0

为了便于阅读,进行了编辑。感谢您的评论! – Kyle 2015-03-02 19:11:03

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