VBA uzlabotais filtrs

Š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š

wave wave wave wave wave