2015-10-14 67 views
1

我在Excel工作表濾波使用.Autofilter數據如下Autofiler爲或病症VBA

if bProds = True then 
    .AutoFilter 4,"<>*strip*",2,"<>*Strip*" 
    .AutoFilter 8,"Product",2,"product" 
else 
    .AutoFilter 8, "<>Product", 1, "<>product" 
    .AutoFilter 4,"*strip*",2,"*Strip*" 
end if 

結果集是行,其中兩個自動篩選條件滿足。 在else部分,我想做一個條件,使得結果是不包含第8列中的產品/產品的行,或者它包含第4列中的strip/strip。

如果兩個條件都是自動過濾器遇到,上面的代碼不起作用。任何方式使它像我的要求一樣工作?

試驗數據也可從this drive.google.com link

表1:

Col1  Col2 Col3 Col4 Col5 Col6  Col7  Col8 
--------- ---- ---- ----- ----- ----  ----  ----- 
1/07/2015 3  3 Word1 word2 AB  Hello Product 
1/13/2015 2  1 word2 word1 AB  hello product 
1/13/2015 2  1 COzier USA  Bill  Allice Assembly 
1/14/2015 3  4 TOny USA  Bill  Allice Wrox 
1/20/2015 2  1 Shawn USA  gerard amy  Product 
1/23/2015 2  1 Wilcox Sanzer Francis Bob  Assembly 
1/26/2015 3  5 Justin Langer Go  febrand Citrix 

表2:

Col1  Col2 Col3 Col4 Col5 Col6  Col7  Col8 
--------- ---- ---- ----- ----- ----  ----  ----- 
1/20/2015 2  1 Shawn USA  gerard amy  Product 

表3:

Col1  Col2 Col3 Col4 Col5 Col6  Col7  Col8 
--------- ---- ---- ----- ----- ----  ----  ----- 
1/07/2015 3  3 Word1 word2 AB  Hello Product 
1/13/2015 2  1 word2 word1 AB  hello product 
1/13/2015 2  1 COzier USA  Bill  Allice Assembly 
1/14/2015 3  4 TOny USA  Bill  Allice Wrox 
1/23/2015 2  1 Wilcox Sanzer Francis Bob  Assembly 
1/26/2015 3  5 Justin Langer Go  febrand Citrix 
+0

我不認爲,除非你使用一個輔助列,您可以用自動篩選實現這一目標。 [高級過濾](https://support.office.com/en-us/article/Filter-by-using-advanced-criteria-4c9222fe-8529-4cd7-a898-3f16abdff32b#bmexample3)可以實現這一點,如果這是可以接受的解決方案 – barrowc

+1

你能提供最少的前後測試數據嗎? –

+0

我可以使用任何構造。由於現有代碼正在使用.Autofilter,我只是檢查是否有可能使用.Autofilter。使用.AdvanceFilter無問題,只要它達到我想要的.. :)。我做了一個測試文件'https://drive.google.com/open?id = 1fvlZnQ12vodFFqjAHaODXcF0CYFkahBKGUBE7EMt8Uc' – Programmerzzz

回答

0
Public Sub autoFilter1() 'Column 8 = "Product" 
    Dim ws As Worksheet 

    Set ws = Worksheets("Sheet1") 
    ws.UsedRange.Rows.EntireRow.Hidden = False 
    If Not ws.AutoFilter Is Nothing Then ws.ShowAllData 

    ws.UsedRange.AutoFilter 8, "product" 
End Sub 

Public Sub autoFilter2() 'Column 8 <> "Product" OR Column 4 = "Word1" 
    Dim ws As Worksheet, vRng As Range 

    Application.ScreenUpdating = False 
    Set ws = Worksheets("Sheet1") 
    ws.UsedRange.Rows.EntireRow.Hidden = False 
    If Not ws.AutoFilter Is Nothing Then ws.ShowAllData 

    ws.UsedRange.AutoFilter 8, "<>product" 
    Set vRng = ws.UsedRange.SpecialCells(xlCellTypeVisible) 
     ws.ShowAllData 
    ws.UsedRange.AutoFilter 4, "word1" 
    Set vRng = Union(vRng, ws.UsedRange.SpecialCells(xlCellTypeVisible)) 
    ws.UsedRange.AutoFilter 

    ws.UsedRange.Rows.EntireRow.Hidden = True 
    vRng.Rows.EntireRow.Hidden = False 
    Application.ScreenUpdating = True 
    ws.Cells(1).Select 
End Sub 

multiAutoFilter

+0

謝謝,讓我測試並找回 – Programmerzzz

+0

這不完全是我想要的。可能是我的問題陳述並不清楚,正如你所說的。例如: - 在我的數據集中,我們根據第8列和第4列進行過濾。我需要將包含第8列中的「產品」的記錄分離出來,在第8列中將非產品值記錄到工作表B中。除此之外,在工作表BI中,需要在第4列中具有「word1」的記錄,雖然他們在第8列中有「產品」。原始文章中的.Autofilter條件符合我的其他條件的邏輯「AND」。但是我需要像我提到的那樣的'OR'行爲。希望我清楚 – Programmerzzz

+0

對於預期結果(可能是因爲無效的測試數據),我仍然不清楚:您在Sheet B_的第8列中表示_non產品值,但您的Sheet B僅包含一個記錄,即「產品」 。我更新了您的初始文章,以包含您在外部文件中提供的示例數據,但我需要進行基本設置:1)記錄的初始列表2)預期結果 - 基於2個條件的2個結果,來自初始記錄集 –