Ta vadnica bo razložila, kako uporabiti metodo Advanced Filter v VBA
Napredno filtriranje v Excelu je zelo uporabno pri obravnavi velikih količin podatkov, kjer želite hkrati uporabiti različne filtre. Uporabite ga lahko tudi za odstranjevanje dvojnikov iz vaših podatkov. Preden poskusite ustvariti napredni filter v VBA, se morate seznaniti z ustvarjanjem naprednega filtra v Excelu.
Razmislite o naslednjem delovnem listu.
Že na prvi pogled lahko vidite, da obstajajo dvojniki, ki jih boste morda želeli odstraniti. Vrsta računa je mešanica varčevanja, posojila za določen čas in čeka.
Najprej morate nastaviti razdelek meril za napredni filter. To lahko storite na ločenem listu.
Zaradi lažjega sklicevanja sem svoj podatkovni list poimenoval »Baza podatkov«, list s kriteriji pa »Merila«.
Napredna sintaksa filtra
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- The Izraz predstavlja objekt obsega - in ga lahko nastavite kot obseg (npr.
- The Dejanje argument je obvezen in bo xlFilterInPlace ali xlFilterCopy
- The Razpon meril Argument je tisto, od česar dobite merila za filtriranje (zgornji list z merili). To ni obvezno, saj ne bi potrebovali merila, če bi na primer filtrirali po edinstvenih vrednostih.
- The CopyToRange Argument je kraj, kamor boste namestili rezultate filtra - lahko filtrirate na mestu ali pa kopirate rezultat filtra na drugo mesto. To je tudi neobvezen argument.
- The Edinstven argument je tudi neobvezen - Prav je filtrirati samo po edinstvenih zapisih, Napačno je filtrirati vse zapise, ki izpolnjujejo merila - če to izpustite, bo privzeto Napačno.
Filtriranje podatkov na mestu
Z uporabo meril, prikazanih zgoraj v listu meril, želimo poiskati vse račune z vrsto „Varčevanje“ in „Tekoče“. Filtriramo na mestu.
123456789 | Sub CreateAdvancedFilter ()Zatemni rngDatabase as RangeDim rngCriteria As Range'Določite bazo podatkov in merilaNastavite rngDatabase = Sheets ("Database"). Range ("A1: H50")Set rngCriteria = Sheets ("Criteria"). Range ("A1: H3")„filtrirajte bazo podatkov po merilihrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEnd Sub |
Koda bo skrila vrstice, ki ne izpolnjujejo meril.
V zgornji postopek VBA nismo vključili argumentov CopyToRange ali Unique.
Ponastavitev podatkov
Preden zaženemo nov filter, moramo počistiti trenutnega. To bo delovalo le, če ste svoje podatke filtrirali.
12345 | Sub ClearFilter ()On Napaka Nadaljuj Naprej'ponastavite filter, da prikaže vse podatkeActiveSheet.ShowAllDataEnd Sub |
Filtriranje edinstvenih vrednosti
V spodnji postopek sem vključil argument Unique, vendar sem izpustil argument CopyToRange. Če izpustite ta argument, vas ALI kot argument za argument morate postaviti vejico
123456789 | Pod UniqueValuesFilter1 ()Zatemni rngDatabase as RangeDim rngCriteria As Range'Določite bazo podatkov in merilaNastavite rngDatabase = Sheets ("Database"). Range ("A1: H50")Set rngCriteria = Sheets ("Criteria"). Range ("A1: H3")"filtrirajte bazo podatkov po merilihrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueEnd Sub |
ALI uporabiti morate imenovane argumente, kot je prikazano spodaj.
123456789 | Pod UniqueValuesFilter2 ()Zatemni rngDatabase as RangeDim rngCriteria As Range'Določite bazo podatkov in merilaNastavite rngDatabase = Sheets ("Database"). Range ("A1: H50")Set rngCriteria = Sheets ("Criteria"). Range ("A1: H3")"filtrirajte bazo podatkov po merilihrngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueEnd Sub |
Oba zgornja primera kode bosta izvajala isti filter, kot je prikazano spodaj - podatke z edinstvenimi vrednostmi.
Uporaba argumenta CopyTo
123456789 | Sub CopyToFilter ()Zatemni rngDatabase as RangeDim rngCriteria As Range'Določite bazo podatkov in merilaNastavite rngDatabase = Sheets ("Database"). Range ("A1: H50")Set rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'kopirajte filtrirane podatke na drugo mestorngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueEnd Sub |
Upoštevajte, da bi lahko imena argumentov v vrstici naprednega filtra izpustili, vendar uporaba poimenovanih argumentov olajša branje in razumevanje kode.
Spodnja vrstica je enaka vrstici v zgornjem postopku.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
Ko se koda zažene, so izvirni podatki še vedno prikazani s filtriranimi podatki, ki so prikazani na ciljni lokaciji, določeni v postopku.
Odstranjevanje dvojnikov iz podatkov
Podvojene podatke lahko odstranimo tako, da izpustimo argument Criteria in podatke kopiramo na novo mesto.
1234567 | Sub RemoveDuplicates ()Zatemni rngDatabase As Range'Določite bazo podatkovNastavite rngDatabase = Sheets ("Database"). Range ("A1: H50")'filtrirajte bazo podatkov v nov obseg z edinstvenim nastavljenim na truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueEnd Sub |