Denne vejledning forklarer, hvordan du bruger metoden Advanced Filter i VBA
Avanceret filtrering i Excel er meget nyttig, når du skal håndtere store datamængder, hvor du vil anvende en række filtre på samme tid. Det kan også bruges til at fjerne dubletter fra dine data. Du skal være fortrolig med at oprette et avanceret filter i Excel, før du prøver at oprette et avanceret filter inden for VBA.
Overvej følgende regneark.
Du kan hurtigt se, at der er dubletter, som du måske vil fjerne. Kontotypen er en blanding af opsparing, løbetid og check.
Først skal du oprette en kriteriesektion for det avancerede filter. Du kan gøre dette i et separat ark.
For nemheds skyld har jeg navngivet mit datablad 'Database' og mit kriterieblad 'Kriterier'.
Avanceret filtersyntaks
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- Det Udtryk repræsenterer områdeobjektet - og kan indstilles som et område (f.eks. område ("A1: A50") - eller området kan tildeles en variabel, og denne variabel kan bruges.
- Det Handling argument er påkrævet og vil enten være xlFilterInPlace eller xlFilterCopy
- Det Kriterier Område argument er, hvor du får kriterierne til at filtrere fra (vores kriterierark ovenfor). Dette er valgfrit, da du ikke ville have brug for et kriterium, hvis du f.eks. Filtrerede efter unikke værdier.
- Det CopyToRange argument er, hvor du vil placere dine filterresultater - du kan filtrere på plads, eller du kan få dit filterresultat kopieret til en alternativ placering. Dette er også et valgfrit argument.
- Det Enestående argument er også valgfrit - Sand er kun at filtrere på unikke poster, Falsk er at filtrere på alle de poster, der opfylder kriterierne - hvis du udelader dette, er standarden Falsk.
Filtrering af data på plads
Ved hjælp af kriterierne vist ovenfor i kriteriebladet - ønsker vi at finde alle konti med en type 'Besparelser' og 'Aktuel'. Vi filtrerer på plads.
123456789 | Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierneIndstil rngDatabase = Sheets ("Database"). Område ("A1: H50")Indstil rngCriteria = Sheets ("Kriterier"). Område ("A1: H3")'filtrer databasen ved hjælp af kriteriernerngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaAfslut Sub |
Koden skjuler de rækker, der ikke opfylder kriterierne.
I ovenstående VBA -procedure inkluderede vi ikke CopyToRange eller Unique -argumenterne.
Nulstilling af data
Inden vi kører et andet filter, skal vi rydde det nuværende. Dette fungerer kun, hvis du har filtreret dine data på plads.
12345 | Sub ClearFilter ()Ved fejl Genoptag næste'nulstil filteret for at vise alle dataActiveSheet.ShowAllDataAfslut Sub |
Filtrering af unikke værdier
I proceduren herunder har jeg inkluderet det unikke argument, men udeladt CopyToRange -argumentet. Hvis du lader dette argument være ude LIGE skal sætte et komma som stedholder for argumentet
123456789 | Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierneIndstil rngDatabase = Sheets ("Database"). Område ("A1: H50")Indstil rngCriteria = Sheets ("Kriterier"). Område ("A1: H3")'filtrer databasen ved hjælp af kriteriernerngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueAfslut Sub |
ELLER du skal bruge navngivne argumenter som vist nedenfor.
123456789 | Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierneIndstil rngDatabase = Sheets ("Database"). Område ("A1: H50")Indstil rngCriteria = Sheets ("Kriterier"). Område ("A1: H3")'filtrer databasen ved hjælp af kriteriernerngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueAfslut Sub |
Begge kodeeksempler ovenfor vil køre det samme filter som vist nedenfor - dataene med kun unikke værdier.
Brug af CopyTo -argumentet
123456789 | Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierneIndstil rngDatabase = Sheets ("Database"). Område ("A1: H50")Indstil rngCriteria = Sheets ("Kriterier"). Område ("A1: H3")'kopier de filtrerede data til en alternativ placeringrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueAfslut Sub |
Bemærk, at vi kunne have udeladt navnene på argumenterne i Avanceret filter -kodelinje, men brug af navngivne argumenter gør koden lettere at læse og forstå.
Denne linje nedenfor er identisk med linjen i proceduren vist ovenfor.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
Når koden er kørt, vises de originale data stadig med de filtrerede data vist på destinationsstedet, der er angivet i proceduren.
Fjernelse af dubletter fra dataene
Vi kan fjerne dubletter fra dataene ved at udelade Criteria -argumentet og kopiere dataene til en ny placering.
1234567 | Sub RemoveDuplicates ()Dim rngDatabase As Range'definere databasenIndstil rngDatabase = Sheets ("Database"). Område ("A1: H50")'filtrer databasen til et nyt område med unikt sæt til sandrngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueAfslut Sub |