2015-03-02 115 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