Napredni filter VBA

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

wave wave wave wave wave