VBA Advanced -suodatin

Tässä opetusohjelmassa kerrotaan, miten Advanced Filter -menetelmää käytetään VBA: ssa

Edistynyt suodatus Excelissä on erittäin hyödyllinen käsiteltäessä suuria tietomääriä, joissa haluat käyttää erilaisia ​​suodattimia samanaikaisesti. Sitä voidaan käyttää myös kopioiden poistamiseen tiedoistasi. Sinun on tunnettava lisäsuodattimen luominen Excelissä, ennen kuin yrität luoda lisäsuodatinta VBA: sta.

Harkitse seuraavaa laskentataulukkoa.

Näet yhdellä silmäyksellä, että on olemassa kaksoiskappaleita, jotka haluat ehkä poistaa. Tilin tyyppi on sekoitus säästöjä, lainaa ja sekkiä.

Ensin sinun on määritettävä ehto -osio lisäsuodattimelle. Voit tehdä tämän erillisellä arkilla.

Viittaamisen helpottamiseksi olen antanut tietolomakkeelleni 'Tietokanta' ja kriteerilehteni 'Ehdot'.

Suodattimen kehittynyt syntaksi

Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Ainutlaatuinen

  • The Ilmaisu edustaa alueobjektia - ja se voidaan asettaa alueeksi (esim. alue ("A1: A50")) - tai alue voidaan määrittää muuttujalle ja sitä voidaan käyttää.
  • The Toiminta argumentti on pakollinen ja se on joko xlFilterInPlace tai xlFilterCopy
  • The Kriteerialue argumentti on se, mistä saat kriteerit suodatettavaksi (yllä oleva Ehdot -taulukko). Tämä on valinnaista, koska et tarvitse ehtoja, jos suodatat esimerkiksi yksilöllisiä arvoja.
  • The CopyToRange argumentti on paikka, johon aiot sijoittaa suodatustulokset - voit suodattaa paikalleen tai voit kopioida suodatustuloksen toiseen paikkaan. Tämä on myös valinnainen argumentti.
  • The Ainutlaatuinen argumentti on myös valinnainen - Totta on suodatettava vain ainutlaatuisia tietueita, Väärä on suodattaa kaikki tietueet, jotka täyttävät ehdot - jos jätät tämän pois, oletusarvo on Väärä.

Tietojen suodatus paikallaan

Käyttämällä kriteerilomakkeen yllä esitettyjä ehtoja - haluamme löytää kaikki tilit, joiden tyyppi on ”Säästö” ja ”Nykyinen”. Suodatamme paikallaan.

123456789 Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'määritellä tietokanta ja kriteerialueetAseta rngDatabase = Sheets ("Tietokanta"). Alue ("A1: H50")Aseta rngCriteria = Sheets ("Criteria"). Alue ("A1: H3")'suodata tietokanta kriteerien avullarngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEnd Sub

Koodi piilottaa rivit, jotka eivät täytä ehtoja.

Yllä olevassa VBA -menettelyssä emme sisällyttäneet CopyToRange- tai Unique -argumentteja.

Tietojen nollaaminen

Ennen kuin suoritamme toisen suodattimen, meidän on tyhjennettävä nykyinen suodatin. Tämä toimii vain, jos olet suodattanut tietosi.

12345 Sub ClearFilter ()Virhe Jatka seuraavaksinollaa suodatin näyttääksesi kaikki tiedotActiveSheet.ShowAllDataEnd Sub

Ainutlaatuisten arvojen suodattaminen

Alla olevassa menettelyssä olen sisällyttänyt Unique -argumentin, mutta jättänyt CopyToRange -argumentin pois. Jos jätät tämän väitteen pois, sinä JOMPIKUMPI täytyy laittaa pilkku argumentin paikkamerkiksi

123456789 Yksilölliset arvot -suodatin1 ()Dim rngDatabase As RangeDim rngCriteria As Range'määritellä tietokanta ja kriteerialueetAseta rngDatabase = Sheets ("Tietokanta"). Alue ("A1: H50")Aseta rngCriteria = Sheets ("Criteria"). Alue ("A1: H3")'suodata tietokanta kriteerien avullarngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria`` TrueEnd Sub

TAI sinun on käytettävä nimettyjä argumentteja alla kuvatulla tavalla.

123456789 Yksilölliset arvot -suodatin2 ()Dim rngDatabase As RangeDim rngCriteria As Range'määritellä tietokanta ja kriteerialueetAseta rngDatabase = Sheets ("Tietokanta"). Alue ("A1: H50")Aseta rngCriteria = Sheets ("Criteria"). Alue ("A1: H3")'suodata tietokanta kriteerien avullarngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueEnd Sub

Molemmat yllä olevat koodiesimerkit käyttävät samaa suodatinta, kuten alla on esitetty - tiedot, joilla on vain yksilöllisiä arvoja.

CopyTo -argumentin käyttäminen

123456789 Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'määritellä tietokanta ja kriteerialueetAseta rngDatabase = Sheets ("Tietokanta"). Alue ("A1: H50")Aseta rngCriteria = Sheets ("Criteria"). Alue ("A1: H3")kopioi suodatetut tiedot toiseen paikkaanrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Alue ("N1: U1"), Ainutlaatuinen: = TosiEnd Sub

Huomaa, että olisimme voineet jättää argumenttien nimet pois Advanced Filter -koodiriviltä, ​​mutta nimettyjen argumenttien käyttäminen helpottaa koodin lukemista ja ymmärtämistä.

Tämä alla oleva rivi on identtinen yllä esitetyn menettelyn rivin kanssa.

1 rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True

Kun koodi on suoritettu, alkuperäiset tiedot näytetään edelleen ja suodatetut tiedot näytetään menettelyssä määritetyssä kohdesijainnissa.

Kaksoiskappaleiden poistaminen tiedoista

Voimme poistaa kaksoiskappaleet datasta jättämällä Ehdot -argumentin pois ja kopioimalla tiedot uuteen paikkaan.

1234567 Sub RemoveDuplicates ()Dim rngDatabase As Range'määrittele tietokantaAseta rngDatabase = Sheets ("Tietokanta"). Alue ("A1: H50")'suodata tietokanta uuteen alueeseen, jonka ainutlaatuinen arvo on tosirngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Alue ("N1: U1"), Ainutlaatuinen: = TosiEnd Sub

wave wave wave wave wave