VBA geavanceerd filter

In deze zelfstudie wordt uitgelegd hoe u de geavanceerde filtermethode in VBA gebruikt

Geavanceerd filteren in Excel is erg handig als u te maken hebt met grote hoeveelheden gegevens waarop u verschillende filters tegelijkertijd wilt toepassen. Het kan ook worden gebruikt om dubbele gegevens uit uw gegevens te verwijderen. U moet bekend zijn met het maken van een geavanceerd filter in Excel voordat u probeert een geavanceerd filter te maken vanuit VBA.

Beschouw het volgende werkblad.

U kunt in één oogopslag zien dat er duplicaten zijn die u mogelijk wilt verwijderen. Het Type rekening is een combinatie van Sparen, Termijnlening en Cheque.

Eerst moet u een sectie met criteria instellen voor het geavanceerde filter. Dit doe je in een apart blad.

Voor het gemak heb ik mijn datablad ‘Database’ en mijn criteriablad ‘Criteria’ genoemd.

Geavanceerde filtersyntaxis

Expression.AdvancedFilter Actie, CriteriaBereik, CopyToRange, Uniek

  • De Uitdrukking vertegenwoordigt het bereikobject - en kan worden ingesteld als een bereik (bijv. Bereik ("A1:A50") - of het bereik kan worden toegewezen aan een variabele en die variabele kan worden gebruikt.
  • De Actie argument is vereist en zal ofwel xlFilterInPlace of xlFilterCopy . zijn
  • De Criteriabereik argument is waar u de criteria vandaan haalt om uit te filteren (ons Criteria-blad hierboven). Dit is optioneel omdat u geen criteria nodig heeft als u bijvoorbeeld op unieke waarden filtert.
  • De KopiërenNaarbereik argument is waar u uw filterresultaten gaat plaatsen - u kunt filteren of u kunt uw filterresultaat naar een alternatieve locatie laten kopiëren. Dit is ook een optioneel argument.
  • De Uniek argument is ook optioneel - Waar is om alleen op unieke records te filteren, niet waar is om te filteren op alle records die aan de criteria voldoen - als u dit weglaat, is de standaard niet waar.

Gegevens op hun plaats filteren

Met behulp van de criteria die hierboven in het criteriablad zijn weergegeven, willen we alle rekeningen vinden met een type 'Spaargeld' en 'Huidig'. We filteren ter plaatse.

123456789 Sub CreateAdvancedFilter()Dim rngDatabase als bereikDim rngCriteria als bereik'definieer de database en criteriabereiken'Stel rngDatabase = Sheets ("Database") in. Bereik ("A1:H50")Stel rngCriteria = Sheets ("Criteria") in. Bereik ("A1:H3")'filter de database met behulp van de criteria'rngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEinde sub

De code verbergt de rijen die niet aan de criteria voldoen.

In de bovenstaande VBA-procedure hebben we de argumenten CopyToRange of Unique niet opgenomen.

De gegevens resetten

Voordat we een ander filter uitvoeren, moeten we het huidige wissen. Dit werkt alleen als je je gegevens hebt gefilterd.

12345 Sub WissenFilter()Bij fout Hervatten volgende'reset het filter om alle gegevens weer te geven'ActiveSheet.ShowAllDataEinde sub

Unieke waarden filteren

In de onderstaande procedure heb ik het Unique-argument opgenomen, maar het CopyToRange-argument weggelaten. Als je dit argument weglaat, OF een komma moeten plaatsen als plaatshouder voor het argument

123456789 Sub Unieke WaardenFilter1()Dim rngDatabase als bereikDim rngCriteria als bereik'definieer de database en criteriabereiken'Stel rngDatabase = Sheets ("Database") in. Bereik ("A1:H50")Stel rngCriteria = Sheets ("Criteria") in. Bereik ("A1:H3")'filter de database met behulp van de criteria'rngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria,,TrueEinde sub

OF u moet benoemde argumenten gebruiken, zoals hieronder wordt weergegeven.

123456789 Sub UniqueValuesFilter2()Dim rngDatabase als bereikDim rngCriteria als bereik'definieer de database en criteriabereiken'Stel rngDatabase = Sheets ("Database") in. Bereik ("A1:H50")Stel rngCriteria = Sheets ("Criteria") in. Bereik ("A1:H3")'filter de database met behulp van de criteria'rngDatabase.AdvancedFilter Actie:=xlFilterInPlace, CriteriaBereik:=rngCriteria, Uniek:=TrueEinde sub

In beide bovenstaande codevoorbeelden wordt hetzelfde filter uitgevoerd, zoals hieronder wordt weergegeven: de gegevens met alleen unieke waarden.

Het argument CopyTo gebruiken

123456789 Sub KopieNaarFilter()Dim rngDatabase als bereikDim rngCriteria als bereik'definieer de database en criteriabereiken'Stel rngDatabase = Sheets ("Database") in. Bereik ("A1:H50")Stel rngCriteria = Sheets ("Criteria") in. Bereik ("A1:H3")'kopieer de gefilterde gegevens naar een alternatieve locatie'rngDatabase.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, CopyToRange:=Range("N1:U1"), Unique:=TrueEinde sub

Merk op dat we de namen van de argumenten in de geavanceerde filterregel van code hadden kunnen weglaten, maar het gebruik van benoemde argumenten maakt de code gemakkelijker te lezen en te begrijpen.

Deze regel hieronder is identiek aan de regel in de bovenstaande procedure.

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

Nadat de code is uitgevoerd, worden de oorspronkelijke gegevens nog steeds weergegeven met de gefilterde gegevens die worden weergegeven op de bestemmingslocatie die in de procedure is opgegeven.

Duplicaten uit de gegevens verwijderen

We kunnen duplicaten uit de gegevens verwijderen door het argument Criteria weg te laten en de gegevens naar een nieuwe locatie te kopiëren.

1234567 Sub VerwijderDuplicaten()Dim rngDatabase als bereik'definieer de database'Stel rngDatabase = Sheets ("Database") in. Bereik ("A1:H50")'filter de database naar een nieuw bereik met uniek ingesteld op true'rngDatabase.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("N1:U1"), Unique:=TrueEinde sub

wave wave wave wave wave