2017-03-01 71 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