Autofiltrering med fler villkor än 2


Det inbyggda autofilter-verktyget tillåter endast två villkor per utsökning och fält. Det kan ibland vara ett hinder för att erhålla önskad data.

I detta tips visas ett sätt att kringgå denna begräsning. Lösningen är nästan utbyggbar till hur många villkor som helst.

 

Om ett felmeddelande erhålls vid kopiering till VBA-modul så läs mer här»
 

 

(© 2002 - 2004 All rights Colo - Used by permission)

Option Explicit

 

Sub Autofilter_Flera_Villkor()

   '© 2004 Alla rättigheter XL-Dennis

   Dim wbBook As Workbook

   Dim wsSheet As Worksheet

   Dim rnData As Range, rnData1 As Range, rnData2 As Range, rnFinal As Range

   Dim rnHead As Range

   Dim stCond1 As String, stCond2 As String, stCond3 As String

 

   stCond1 = "AA"

   stCond2 = "BB"

   stCond3 = "CC"

 

   Set wbBook = ThisWorkbook

   Set wsSheet = wbBook.Worksheets("Blad1")

 

   With wsSheet

      Set rnHead = .Range("A1:C1")

      .Rows(1).Insert (1) 'Infogar en dummy-rad.

      .Range("A1:C1").Value = "Data"  'Lägger till dummy-värde.

      Set rnData = .Range(Range("A1"), .Range("C65536").End(xlUp))

   End With

 

   Application.ScreenUpdating = False

 

   With rnData

      'Selektion utifrån de två första villkoren.

      .AutoFilter Field:=1, Criteria1:=stCond1, _

            Operator:=xlOr, Criteria2:=stCond2

      Set rnData1 = .SpecialCells(xlCellTypeVisible)

      'Selektion utifrån det tredje villkoret.

      .AutoFilter Field:=1, Criteria1:=stCond3

      Set rnData2 = .SpecialCells(xlCellTypeVisible)

      .AutoFilter

   End With

 

   'Sammanfogar cellområdena.

   Set rnFinal = Application.Union(rnHead, rnData1, rnData2)

 

   With wsSheet

      .Rows(1).Delete 'Tar bort den infogade raden

   End With

 

   'Skriver ut cellområdets adress i direktfönstret.

   Debug.Print rnFinal.Address

   Application.ScreenUpdating = True

End Sub