VBA avansert filter

Denne opplæringen forklarer hvordan du bruker Advanced Filter -metoden i VBA

Avansert filtrering i Excel er veldig nyttig når du skal håndtere store mengder data der du vil bruke en rekke filtre samtidig. Den kan også brukes til å fjerne duplikater fra dataene dine. Du må være kjent med å lage et avansert filter i Excel før du prøver å lage et avansert filter fra VBA.

Vurder følgende regneark.

Du kan med et øyeblikk se at det er dubletter som du kanskje vil fjerne. Kontotypen er en blanding av sparing, terminlån og sjekk.

Først må du sette opp en kriteriedel for det avanserte filteret. Du kan gjøre dette i et eget ark.

For enkel referanse har jeg navngitt databladet mitt ‘Database’ og kriteriebladet ‘Kriterier’.

Avansert filtersyntaks

Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique

  • De Uttrykk representerer områdeobjektet - og kan settes som et område (f.eks. område ("A1: A50") - eller området kan tilordnes en variabel, og denne variabelen kan brukes.
  • De Handling argument er påkrevd og vil enten være xlFilterInPlace eller xlFilterCopy
  • De Kriterier argumentet er der du får kriteriene til å filtrere fra (vårt kriterieark ovenfor). Dette er valgfritt, da du ikke trenger noen kriterier hvis du for eksempel filtrerte etter unike verdier.
  • De CopyToRange argumentet er hvor du skal sette filterresultatene - du kan filtrere på plass, eller du kan få filterresultatet kopiert til et alternativt sted. Dette er også et valgfritt argument.
  • De Unik argumentet er også valgfritt - ekte er å filtrere bare på unike poster, Falsk er å filtrere på alle postene som oppfyller kriteriene - hvis du utelater dette, vil standarden være Falsk.

Filtrering av data på plass

Ved å bruke kriteriene vist ovenfor i kriteriebladet - ønsker vi å finne alle kontoene med en type ‘Sparing’ og ‘Gjeldende’. Vi filtrerer på plass.

123456789 Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierAngi rngDatabase = Sheets ("Database"). Område ("A1: H50")Angi rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'filtrer databasen ved å bruke kriterienerngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaSlutt Sub

Koden vil skjule radene som ikke oppfyller kriteriene.

I ovennevnte VBA -prosedyre inkluderte vi ikke CopyToRange- eller Unique -argumentene.

Tilbakestiller dataene

Før vi kjører et nytt filter, må vi fjerne det nåværende filteret. Dette fungerer bare hvis du har filtrert dataene dine på plass.

12345 Sub ClearFilter ()Ved feil Fortsett neste'tilbakestill filteret for å vise alle dataeneActiveSheet.ShowAllDataSlutt Sub

Filtrering av unike verdier

I fremgangsmåten nedenfor har jeg inkludert Unique -argumentet, men utelatt CopyToRange -argumentet. Hvis du lar dette argumentet være ute, du ENTEN må sette et komma som en plassholder for argumentet

123456789 Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierAngi rngDatabase = Sheets ("Database"). Område ("A1: H50")Angi rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'filtrer databasen ved å bruke kriterienerngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueSlutt Sub

ELLER du må bruke navngitte argumenter som vist nedenfor.

123456789 Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierAngi rngDatabase = Sheets ("Database"). Område ("A1: H50")Angi rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'filtrer databasen ved å bruke kriterienerngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueSlutt Sub

Begge kodeeksemplene ovenfor vil kjøre det samme filteret, som vist nedenfor - dataene med bare unike verdier.

Bruke CopyTo -argumentet

123456789 Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definere databasen og kriterierAngi rngDatabase = Sheets ("Database"). Område ("A1: H50")Angi rngCriteria = Sheets ("Criteria"). Område ("A1: H3")'kopier de filtrerte dataene til et annet stedrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueSlutt Sub

Vær oppmerksom på at vi kunne ha utelatt navnene på argumentene i Avansert filter -kodelinje, men bruk av navngitte argumenter gjør koden lettere å lese og forstå.

Denne linjen nedenfor er identisk med linjen i fremgangsmåten vist ovenfor.

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

Når koden er kjørt, vises de originale dataene fortsatt med de filtrerte dataene vist på destinasjonsstedet som er angitt i prosedyren.

Fjerne duplikater fra dataene

Vi kan fjerne duplikater fra dataene ved å utelate Criteria -argumentet og kopiere dataene til et nytt sted.

1234567 Sub RemoveDuplicates ()Dim rngDatabase As Range'definere databasenAngi rngDatabase = Sheets ("Database"). Område ("A1: H50")'filtrer databasen til et nytt område med et unikt sett til truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueSlutt Sub

wave wave wave wave wave