Šajā apmācībā tiks paskaidrots, kā izmantot uzlabotā filtra metodi VBA
Uzlabotā filtrēšana programmā Excel ir ļoti noderīga, strādājot ar lielu datu daudzumu, ja vēlaties vienlaikus lietot dažādus filtrus. To var izmantot arī, lai no jūsu datiem noņemtu dublikātus. Pirms mēģināt izveidot papildu filtru no VBA, jums jāzina Excel papildu filtra izveide.
Apsveriet šādu darblapu.
Īsumā varat redzēt, ka ir dublikāti, kurus jūs varētu vēlēties noņemt. Konta veids ir uzkrājumu, termiņa aizdevuma un čeka kombinācija.
Vispirms jums ir jāizveido papildu filtra kritēriju sadaļa. To var izdarīt atsevišķā lapā.
Lai atvieglotu atsauci, esmu nosaucis savu datu lapu “Datu bāze” un kritēriju lapu “Kritēriji”.
Papildu filtra sintakse
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unikāls
- The Izteiksme apzīmē diapazona objektu - un to var iestatīt kā diapazonu (piemēram, diapazons (“A1: A50”)) - vai diapazonu var piešķirt mainīgajam un šo mainīgo var izmantot.
- The Darbība arguments ir obligāts un būs vai nu xlFilterInPlace, vai xlFilterCopy
- The Kritēriju diapazons arguments ir vieta, no kurienes tiek filtrēti kritēriji (mūsu kritēriju lapa iepriekš). Tas nav obligāti, jo jums nebūtu nepieciešami kritēriji, piemēram, filtrējot pēc unikālām vērtībām.
- The CopyToRange arguments ir vieta, kur jūs ievietojat filtra rezultātus - varat filtrēt vietā vai arī filtra rezultātu var nokopēt citā vietā. Šis ir arī fakultatīvs arguments.
- The Unikāls arguments arī nav obligāts - Taisnība ir filtrēt tikai unikālus ierakstus, Nepatiess ir filtrēt visus ierakstus, kas atbilst kritērijiem - ja to izlaidīsit, noklusējums būs Nepatiess.
Datu filtrēšana vietā
Izmantojot kritēriju lapā iepriekš parādītos kritērijus, mēs vēlamies atrast visus kontus ar “ietaupījumu” un “pašreizējo” veidu. Mēs filtrējam vietā.
123456789 | Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range"definējiet datu bāzi un kritēriju diapazonusIestatīt rngDatabase = Sheets ("Database"). Diapazons ("A1: H50")Iestatiet rngCriteria = Sheets ("Kritēriji"). Diapazons ("A1: H3")filtrējiet datu bāzi, izmantojot kritērijusrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaBeigu apakš |
Kods slēps rindas, kas neatbilst kritērijiem.
Iepriekš minētajā VBA procedūrā mēs neiekļāvām CopyToRange vai Unique argumentus.
Datu atiestatīšana
Pirms cita filtra palaišanas mums ir jāiztīra pašreizējais. Tas darbosies tikai tad, ja esat filtrējis savus datus.
12345 | Sub ClearFilter ()Par kļūdu Atsākt nākamoatiestatiet filtru, lai tiktu parādīti visi datiActiveSheet.ShowAllDataBeigu apakš |
Unikālu vērtību filtrēšana
Tālāk aprakstītajā procedūrā esmu iekļāvis argumentu Unikāls, bet izlaidis argumentu CopyToRange. Ja jūs atstājat šo argumentu, jūs ARĪ ir jāliek komats kā argumenta vietas turētājs
123456789 | Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngCriteria As Range"definējiet datu bāzi un kritēriju diapazonusIestatīt rngDatabase = Sheets ("Database"). Diapazons ("A1: H50")Iestatiet rngCriteria = Sheets ("Kritēriji"). Diapazons ("A1: H3")filtrējiet datu bāzi, izmantojot kritērijusrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueBeigu apakš |
VAI jums jāizmanto nosaukti argumenti, kā parādīts zemāk.
123456789 | Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range"definējiet datu bāzi un kritēriju diapazonusIestatīt rngDatabase = Sheets ("Database"). Diapazons ("A1: H50")Iestatiet rngCriteria = Sheets ("Kritēriji"). Diapazons ("A1: H3")filtrējiet datu bāzi, izmantojot kritērijusrngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueBeigu apakš |
Abos iepriekš minētajos koda piemēros tiks izmantots tas pats filtrs, kā parādīts zemāk - dati ar tikai unikālām vērtībām.
Izmantojot argumentu CopyTo
123456789 | Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range"definējiet datu bāzi un kritēriju diapazonusIestatīt rngDatabase = Sheets ("Database"). Diapazons ("A1: H50")Iestatiet rngCriteria = Sheets ("Kritēriji"). Diapazons ("A1: H3")Kopējiet filtrētos datus uz citu vieturngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Diapazons ("N1: U1"), unikāls: = TrueBeigu apakš |
Ņemiet vērā, ka mēs varējām izlaist argumentu nosaukumus koda rindā Papildu filtrs, taču nosaukto argumentu izmantošana padara kodu vieglāk lasāmu un saprotamu.
Šī zemāk esošā rinda ir identiska iepriekš parādītās procedūras līnijai.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
Kad kods ir izpildīts, sākotnējie dati joprojām tiek parādīti kopā ar filtrētajiem datiem, kas parādīti procedūrā norādītajā galamērķa vietā.
Dublikātu noņemšana no datiem
Mēs varam noņemt datu dublikātus, izlaižot argumentu Kritēriji un kopējot datus uz jaunu atrašanās vietu.
1234567 | Sub RemoveDuplicates ()Dim rngDatabase As Range"definējiet datu bāziIestatīt rngDatabase = Sheets ("Database"). Diapazons ("A1: H50")filtrējiet datu bāzi uz jaunu diapazonu ar unikālu vērtību “true”rngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Diapazons ("N1: U1"), unikāls: = TrueBeigu apakš |