VBA Advanced Filter

Denna handledning kommer att förklara hur du använder Advanced Filter -metoden i VBA

Avancerad filtrering i Excel är mycket användbar när det handlar om stora datamängder där du vill använda en mängd olika filter samtidigt. Det kan också användas för att ta bort dubbletter från dina data. Du måste vara bekant med att skapa ett avancerat filter i Excel innan du försöker skapa ett avancerat filter från VBA.

Tänk på följande kalkylblad.

Du kan snabbt se att det finns dubbletter som du kanske vill ta bort. Kontotypen är en blandning av sparande, terminslån och check.

Först måste du ställa in en kriteriesektion för det avancerade filtret. Du kan göra detta i ett separat ark.

För att underlätta referensen har jag kallat mitt datablad för 'Databas' och mitt kriterium 'Kriterier'.

Avancerat filtersyntax

Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique

  • De Uttryck representerar intervallobjektet - och kan ställas in som ett område (t.ex. intervall ("A1: A50") - eller så kan intervallet tilldelas en variabel och den variabeln kan användas.
  • De Handling argument krävs och kommer antingen att vara xlFilterInPlace eller xlFilterCopy
  • De Kriterier argumentet är där du får kriterierna att filtrera från (vårt kriterieblad ovan). Detta är valfritt eftersom du inte skulle behöva några kriterier om du till exempel filtrerade efter unika värden.
  • De CopyToRange argument är där du ska placera dina filterresultat - du kan filtrera på plats eller så kan du få ditt filterresultat kopierat till en alternativ plats. Detta är också ett valfritt argument.
  • De Unik argumentet är också valfritt - Sann är att bara filtrera på unika poster, Falsk är att filtrera på alla poster som uppfyller kriterierna - om du utelämnar detta blir standardvärdet Falsk.

Filtrera data på plats

Med hjälp av kriterierna som visas ovan i kriteriebladet - vill vi hitta alla konton med en typ av "Besparingar" och "Aktuella". Vi filtrerar på plats.

123456789 Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definiera databasen och kriteriernaAnge rngDatabase = Sheets ("Database"). Område ("A1: H50")Ange rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'filtrera databasen med hjälp av kriteriernarngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaAvsluta Sub

Koden döljer raderna som inte uppfyller kriterierna.

I ovanstående VBA -procedur inkluderade vi inte CopyToRange eller Unique -argumenten.

Återställer data

Innan vi kör ett nytt filter måste vi rensa det aktuella. Detta fungerar bara om du har filtrerat dina data på plats.

12345 Sub ClearFilter ()Vid fel Återuppta nästa'återställ filtret för att visa all dataActiveSheet.ShowAllDataAvsluta Sub

Filtrering av unika värden

I proceduren nedan har jag inkluderat argumentet Unique men utelämnat CopyToRange -argumentet. Om du lämnar detta argument ut, du ANTINGEN måste sätta ett komma som platshållare för argumentet

123456789 Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngCriteria As Range'definiera databasen och kriteriernaAnge rngDatabase = Sheets ("Database"). Område ("A1: H50")Ange rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'filtrera databasen med hjälp av kriteriernarngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueAvsluta Sub

ELLER du måste använda namngivna argument som visas nedan.

123456789 Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range'definiera databasen och kriteriernaAnge rngDatabase = Sheets ("Database"). Område ("A1: H50")Ange rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'filtrera databasen med hjälp av kriteriernarngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueAvsluta Sub

Båda kodexemplen ovan kör samma filter som visas nedan - data med endast unika värden.

Använda CopyTo -argumentet

123456789 Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definiera databasen och kriteriernaStäll in rngDatabase = Sheets ("Database"). Område ("A1: H50")Ange rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'kopiera filtrerade data till en alternativ platsrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueAvsluta Sub

Observera att vi kunde ha utelämnat namnen på argumenten i kodraden Avancerat filter, men att använda namngivna argument gör koden lättare att läsa och förstå.

Denna rad nedan är identisk med raden i proceduren som visas ovan.

1 rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True

När koden har körts visas originaldata fortfarande med de filtrerade data som visas på den destinationsplats som anges i proceduren.

Ta bort dubbletter från data

Vi kan ta bort dubbletter från data genom att utelämna kriteriet argumentet och kopiera data till en ny plats.

1234567 Sub RemoveDuplicates ()Dim rngDatabase As Range'definiera databasenStäll in rngDatabase = Sheets ("Database"). Område ("A1: H50")'filtrera databasen till ett nytt intervall med unika inställningar till truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueAvsluta Sub

wave wave wave wave wave