2017-03-01 53 views
1

我想查看ColumnC中所有使用過的單元格。如果ColumnC中的特定單元格包含字符串,例如'第2行'到'第15行',則隱藏該行。以下是我所熟悉的代碼,但它沒有達到我期望的效果。如何循環遍歷單元格並遍歷數組,然後根據匹配隱藏行?

Sub Hide_Rows() 
Dim cell As Range 
Dim Mainfram(13) As String 

    Mainfram(0) = "Day 2" 
    Mainfram(1) = "Day 3" 
    Mainfram(2) = "Day 4" 
    Mainfram(3) = "Day 5" 
    Mainfram(4) = "Day 6" 
    Mainfram(5) = "Day 7" 
    Mainfram(6) = "Day 8" 
    Mainfram(7) = "Day 9" 
    Mainfram(8) = "Day 10" 
    Mainfram(9) = "Day 11" 
    Mainfram(10) = "Day 12" 
    Mainfram(11) = "Day 13" 
    Mainfram(12) = "Day 14" 
    Mainfram(13) = "Day 15" 

    lrow = Cells(Rows.Count, 1).End(xlUp).Row 

    For i = 2 To 15 
    For Each cell In Range("C1:C" & lrow) 
     pos = InStr(1, cell.Value, Mainfram(i)) 
     If pos > 1 Then 
      cell.EntireRow.Hidden = True 
     End If 
    Next 
    Next i 
End Sub 
+1

嘗試'pos> 0'而不是'pos> 1' –

回答

2

這應該工作:

Option Explicit 

Sub Hide_Rows() 

    Dim cell   As Range 
    Dim Mainfram(13) As String 
    Dim lRow   As Long 
    Dim i    As Long 
    Dim pos    As Long 

    Mainfram(0) = "Day 2" 
    Mainfram(1) = "Day 3" 
    Mainfram(2) = "Day 4" 
    Mainfram(3) = "Day 5" 
    Mainfram(4) = "Day 6" 
    Mainfram(5) = "Day 7" 
    Mainfram(6) = "Day 8" 
    Mainfram(7) = "Day 9" 
    Mainfram(8) = "Day 10" 
    Mainfram(9) = "Day 11" 
    Mainfram(10) = "Day 12" 
    Mainfram(11) = "Day 13" 
    Mainfram(12) = "Day 14" 
    Mainfram(13) = "Day 15" 

    'you are with C 
    lRow = Cells(Rows.Count, 3).End(xlUp).Row 

    For i = LBound(Mainfram) To UBound(Mainfram) 
     For Each cell In Range("C1:C" & lRow) 
      pos = InStr(1, cell.Value, Mainfram(i)) 
      Debug.Print pos 

      If pos >= 1 Then 
       cell.EntireRow.Hidden = True 
      End If 

     Next 
    Next i 

End Sub 

犯了一些錯誤在你的代碼:

  • If pos >= 1 Then是你所需要的。
  • 如果你去i = 15,而你只有 已經宣告到Mainfram(13),那麼在陣列邊界之外出現 會出現一個令人討厭的錯誤。
  • 此外,LBoundUbound是 一個循環數組的好方法。
  • 最後但並非最不重要的,你需要可能會發現在C最後一個值,而不是A.

乾杯!

+0

就是這樣!非常感謝!! – ryguy72

+0

@ ryguy72 - 歡迎您:) – Vityata