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 |