VBA Avanceret filter

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

wave wave wave wave wave