Pokročilý filtr VBA

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

wave wave wave wave wave