Tento tutoriál vysvětlí, jak používat metodu Advanced Filter ve VBA
Pokročilé filtrování v aplikaci Excel je velmi užitečné při práci s velkým množstvím dat, kde chcete použít různé filtry současně. Lze jej také použít k odstranění duplikátů z vašich dat. Než se pokusíte vytvořit rozšířený filtr z prostředí VBA, musíte se seznámit s vytvářením rozšířeného filtru v aplikaci Excel.
Zvažte následující list.
Na první pohled vidíte, že existují duplikáty, které byste mohli chtít odstranit. Typ účtu je kombinací úspor, termínovaných půjček a šeků.
Nejprve musíte nastavit sekci kritérií pro rozšířený filtr. Můžete to udělat v samostatném listu.
Pro snadnou orientaci jsem svůj datový list pojmenoval „Databáze“ a list s kritérii „Kritéria“.
Pokročilá syntaxe filtru
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- The Výraz představuje objekt rozsahu - a lze jej nastavit jako rozsah (např. rozsah („A1: A50“) - nebo rozsah lze přiřadit proměnné a tuto proměnnou lze použít.
- The Akce argument je povinný a bude buď xlFilterInPlace, nebo xlFilterCopy
- The Rozsah kritérií argumentem je, odkud máte filtrovat kritéria (náš list kritérií výše). Toto je volitelné, protože byste například nepotřebovali kritéria, pokud byste filtrovali jedinečné hodnoty.
- The CopyToRange argumentem je, kam hodláte umístit výsledky filtrování - můžete filtrovat na místě nebo si můžete nechat výsledek filtru zkopírovat na jiné místo. Toto je také nepovinný argument.
- The Unikátní argument je také volitelný - Skutečný je filtrovat pouze na jedinečných záznamech, Nepravdivé je filtrovat všechny záznamy, které splňují kritéria - pokud toto vynecháte, bude výchozí Nepravdivé.
Filtrování dat na místě
Pomocí výše uvedených kritérií v listu kritérií chceme najít všechny účty s typem „Úspory“ a „Aktuální“. Filtrujeme na místě.
123456789 | Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definujte rozsahy databází a kritérií.'Nastavit rngDatabase = Sheets ("Database"). Range ("A1: H50")Nastavit rngCriteria = Listy ("Kritéria"). Rozsah ("A1: H3")'filtrujte databázi podle kritérií.'rngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEnd Sub |
Kód skryje řádky, které nesplňují kritéria.
Ve výše uvedené proceduře VBA jsme nezahrnuli argumenty CopyToRange nebo Unique.
Resetování dat
Než spustíme další filtr, musíme vymazat ten aktuální. To bude fungovat pouze tehdy, pokud jste filtrovali svá data na místě.
12345 | Sub ClearFilter ()Při chybě Pokračovat Další'resetujte filtr tak, aby zobrazoval všechna dataActiveSheet.ShowAllDataEnd Sub |
Filtrování jedinečných hodnot
Do níže uvedeného postupu jsem zahrnul argument Unique, ale vynechal jsem argument CopyToRange. Pokud tento argument vynecháte, vy BUĎ musíte jako argument pro argument uvést čárku
123456789 | Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngCriteria As Range'definujte rozsahy databází a kritérií.'Nastavit rngDatabase = Sheets ("Database"). Range ("A1: H50")Nastavit rngCriteria = Listy ("Kritéria"). Rozsah ("A1: H3")'filtrujte databázi podle kritérií.'rngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria`` TrueEnd Sub |
NEBO musíte použít pojmenované argumenty, jak je uvedeno níže.
123456789 | Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range'definujte rozsahy databází a kritérií.'Nastavit rngDatabase = Sheets ("Database"). Range ("A1: H50")Nastavit rngCriteria = Listy ("Kritéria"). Rozsah ("A1: H3")'filtrujte databázi podle kritérií.'rngDatabase.AdvancedFilter Akce: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unikátní: = TrueEnd Sub |
Oba výše uvedené příklady kódu spustí stejný filtr, jak je uvedeno níže - data pouze s jedinečnými hodnotami.
Pomocí argumentu CopyTo
123456789 | Dílčí CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'definujte rozsahy databází a kritérií.'Nastavit rngDatabase = Sheets ("Database"). Range ("A1: H50")Nastavit rngCriteria = Listy ("Kritéria"). Rozsah ("A1: H3")'zkopírujte filtrovaná data na jiné místorngDatabase.AdvancedFilter Akce: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Rozsah ("N1: U1"), jedinečný: = TrueEnd Sub |
Všimněte si toho, že jsme mohli vynechat názvy argumentů v řádku rozšířeného filtru kódu, ale použití pojmenovaných argumentů usnadňuje čtení a porozumění kódu.
Tento řádek níže je shodný s řádkem ve výše uvedeném postupu.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
Jakmile je kód spuštěn, původní data se stále zobrazují s filtrovanými daty zobrazenými v cílovém umístění určeném v postupu.
Odebírání duplicit z dat
Duplikáty můžeme z dat odebrat vynecháním argumentu Kritéria a zkopírováním dat do nového umístění.
1234567 | Sub Odebrat duplikáty ()Dim rngDatabase As Range'definovat databáziNastavit rngDatabase = Sheets ("Database"). Range ("A1: H50")'filtrujte databázi na nový rozsah s jedinečným nastavením na hodnotu true.'rngDatabase.AdvancedFilter Akce: = xlFilterCopy, CopyToRange: = Rozsah ("N1: U1"), jedinečný: = TrueEnd Sub |