2015-11-02 83 views
0

我正在嘗試編寫一個宏,它將根據行中的值篩選出不是列的列。例如: -根據行中的值篩選出不是列的行

apple banana pear lime 
lime lime lime apple 
pear pear pear lime 
pear banana lime lime 
apple apple apple apple 

所以,如果我濾上面的例子爲apple我得到剩餘的第一,第二和最後一行。

+4

絕對有可能的。發佈您嘗試過的代碼。 – DanL

回答

0

試試這個:

Sub Filter_By_Rows() 
Dim StrToLookFor As String, _ 
    ToHide As Boolean, _ 
    LastCol As Integer, _ 
    Ws As Worksheet 

StrToLookFor = InputBox("Hide the rows not containing that value :") 
Set Ws = ThisWorkbook.ActiveSheet 
LastCol = Ws.Cells(1, Ws.Columns.Count).End(xlToLeft).Column 

If StrToLookFor <> vbNullString Then 
    For i = 2 To Ws.Range("A" & Ws.Rows.Count).End(xlUp).Row 
     ToHide = True 
     For j = 1 To LastCol 
      If InStr(1, Ws.Cells(i, j), StrToLookFor) Then 
       ToHide = False 
       Exit For 
      Else 
      End If 
     Next j 
     Ws.Cells(i, 1).EntireRow.Hidden = ToHide 
    Next i 
Else 
End If 

還是這個版本的多個字符串:

Sub Multi_Filter_By_Rows() 
Dim StrToLookFor As String, _ 
    ToHide As Boolean, _ 
    LastCol As Integer, _ 
    Ws As Worksheet, _ 
    A() As String 

'StrToLookFor = InputBox("Hide the rows not containing these values (separated with '/') :") 
StrToLookFor = "apple/banana" 
Set Ws = ThisWorkbook.ActiveSheet 
LastCol = Ws.Cells(1, Ws.Columns.Count).End(xlToLeft).Column 

If StrToLookFor <> vbNullString Then 
    If InStr(1, StrToLookFor, "/") Then 
     A = Split(StrToLookFor, "/") 
     For i = 2 To Ws.Range("A" & Ws.Rows.Count).End(xlUp).Row 
      ToHide = True 
      For k = LBound(A) To UBound(A) 
       For j = 1 To LastCol 
        If InStr(1, Ws.Cells(i, j), A(k)) Then 
         ToHide = False 
         GoTo HideNow 
        Else 
        End If 
       Next j 
      Next k 
HideNow: 
      Ws.Cells(i, 1).EntireRow.Hidden = ToHide 
     Next i 
    Else 
     For i = 2 To Ws.Range("A" & Ws.Rows.Count).End(xlUp).Row 
      ToHide = True 
      For j = 1 To LastCol 
       If InStr(1, Ws.Cells(i, j), StrToLookFor) Then 
        ToHide = False 
        Exit For 
       Else 
       End If 
      Next j 
      Ws.Cells(i, 1).EntireRow.Hidden = ToHide 
     Next i 
    End If 
Else 
End If 
End Sub 
+0

感謝這項工作是否有任何方式來重新編輯代碼,而不是彈出一個消息框,您將多個值放在代碼中。我試圖擺脫= inputbox ...,而是把數組(「蘋果」,「香蕉」),但它給了我錯誤13類型不匹配 – Lucky01

+0

你是什麼意思的多個值?要同時測試多個不同字符串的存在?如果是,請嘗試編輯! (在幾秒鐘內);) – R3uK

+0

我的意思是在我的上面的工作表中,如果蘋果或香蕉出現在行中,那麼它顯示該行。所以只有第3行被隱藏。我需要它,因此您可以定義代碼中的值(蘋果或香蕉),並且不會彈出。 – Lucky01