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 |