Rozšírený filter VBA

Tento tutoriál vám vysvetlí, ako používať metódu Advanced Filter vo VBA

Rozšírené filtrovanie v programe Excel je veľmi užitočné pri práci s veľkým množstvom údajov, kde chcete použiť rôzne filtre súčasne. Môže sa tiež použiť na odstránenie duplikátov z vašich údajov. Pred pokusom o vytvorenie rozšíreného filtra z VBA sa musíte zoznámiť s vytváraním rozšíreného filtra v programe Excel.

Zvážte nasledujúci pracovný list.

Na prvý pohľad vidíte, že existujú duplikáty, ktoré by ste mohli chcieť odstrániť. Typ účtu je kombináciou úspor, termínovaných pôžičiek a šekov.

Najprv musíte nastaviť sekciu kritérií pre rozšírený filter. Môžete to urobiť v samostatnom hárku.

Pre jednoduchosť referencie som svoj údajový list pomenoval „Databáza“ a list s kritériami „Kritériá“.

Rozšírená syntax filtra

Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique

  • The Výraz predstavuje objekt rozsahu - a môže byť nastavený ako rozsah (napr. rozsah („A1: A50“) - alebo rozsah môže byť priradený k premennej a túto premennú je možné použiť.
  • The Akcia argument je povinný a bude buď xlFilterInPlace, alebo xlFilterCopy
  • The Rozsah kritérií argument je miesto, odkiaľ chcete filtrovať kritériá (náš list s kritériami vyššie). Toto je voliteľné, pretože by ste nepotrebovali žiadne kritérium, ak by ste napríklad filtrovali jedinečné hodnoty.
  • The CopyToRange argumentom je, kam umiestnite výsledky filtra - môžete filtrovať na mieste alebo si môžete nechať výsledok filtra skopírovať na alternatívne miesto. Toto je tiež nepovinný argument.
  • The Unikátny argument je tiež voliteľný - Pravda je filtrovať iba podľa jedinečných záznamov, Falošné je filtrovať všetky záznamy, ktoré spĺňajú kritériá - ak to vynecháte, predvolené bude Falošné.

Filtrovanie údajov na mieste

Pomocou kritérií uvedených vyššie v hárku kritérií chceme nájsť všetky účty s typom „sporenia“ a „aktuálneho“. Filtrujeme na mieste.

123456789 Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngKritériá ako rozsah'definujte databázu a rozsahy kritériíNastaviť rngDatabase = Tabuľky ("Databáza"). Rozsah ("A1: H50")Nastaviť rngCriteria = Listy („Kritériá“). Rozsah („A1: H3“)'filtrovať databázu podľa kritériírngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaKoniec pod

Kód skryje riadky, ktoré nespĺňajú kritériá.

Do vyššie uvedeného postupu VBA sme nezahrnuli argumenty CopyToRange ani Unique.

Obnovenie údajov

Pred spustením ďalšieho filtra musíme vymazať ten súčasný. Bude to fungovať iba vtedy, ak máte filtrované údaje na mieste.

12345 Sub ClearFilter ()Pri chybe Pokračovať ďalej'resetujte filter, aby sa zobrazili všetky údajeActiveSheet.ShowAllDataKoniec pod

Filtrovanie jedinečných hodnôt

Do nižšie uvedeného postupu som zahrnul argument Unique, ale vynechal som argument CopyToRange. Ak tento argument vynecháte, vy EŠTE ako argument pre argument uvádzať čiarku

123456789 Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngKritériá ako rozsah'definujte databázu a rozsahy kritériíNastaviť rngDatabase = Tabuľky ("Databáza"). Rozsah ("A1: H50")Nastaviť rngCriteria = Listy („Kritériá“). Rozsah („A1: H3“)'filtrovať databázu podľa kritériírngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueKoniec pod

ALEBO musíte použiť pomenované argumenty, ako je uvedené nižšie.

123456789 Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngKritériá ako rozsah'definujte databázu a rozsahy kritériíNastaviť rngDatabase = Tabuľky ("Databáza"). Rozsah ("A1: H50")Nastaviť rngCriteria = Listy („Kritériá“). Rozsah („A1: H3“)'filtrovať databázu podľa kritériírngDatabase.AdvancedFilter Akcia: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unikátny: = TrueKoniec pod

Oba vyššie uvedené príklady kódu spustia rovnaký filter, ako je uvedené nižšie - údaje s jedinečnými hodnotami.

Použitie argumentu CopyTo

123456789 Sub CopyToFilter ()Dim rngDatabase As RangeDim rngKritériá ako rozsah'definujte databázu a rozsahy kritériíNastaviť rngDatabase = Tabuľky ("Databáza"). Rozsah ("A1: H50")Nastaviť rngCriteria = Listy („Kritériá“). Rozsah („A1: H3“)'skopírujte filtrované údaje na alternatívne miestorngDatabase.AdvancedFilter Akcia: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Rozsah ("N1: U1"), jedinečný: = TrueKoniec pod

Všimnite si toho, že sme mohli vynechať názvy argumentov v riadku kódu Rozšírený filter, ale použitie pomenovaných argumentov uľahčuje čítanie a porozumenie kódu.

Tento nižšie uvedený riadok je identický s riadkom vo vyššie uvedenom postupe.

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

Akonáhle je kód spustený, pôvodné údaje sa stále zobrazujú s filtrovanými údajmi zobrazenými v cieľovom umiestnení určenom v postupe.

Odstránenie duplikátov z údajov

Duplikáty môžeme z údajov odstrániť tak, že vynecháme argument Kritériá a skopírujeme údaje na nové miesto.

1234567 Sub RemoveDuplicates ()Dim rngDatabase As Range'definovať databázuNastaviť rngDatabase = Tabuľky ("Databáza"). Rozsah ("A1: H50")'filtrovať databázu na nový rozsah s jedinečnou hodnotou truerngDatabase.AdvancedFilter Akcia: = xlFilterCopy, CopyToRange: = rozsah ("N1: U1"), jedinečný: = pravdaKoniec pod

wave wave wave wave wave