Filtru avansat VBA

Acest tutorial va explica modul de utilizare a metodei Advanced Filter în VBA

Filtrarea avansată în Excel este foarte utilă atunci când se tratează cantități mari de date în care doriți să aplicați o varietate de filtre în același timp. Poate fi, de asemenea, utilizat pentru a elimina duplicatele din datele dvs. Trebuie să vă familiarizați cu crearea unui filtru avansat în Excel înainte de a încerca să creați un filtru avansat din VBA.

Luați în considerare următoarea foaie de lucru.

Puteți vedea dintr-o privire că există duplicate pe care ați putea dori să le eliminați. Tipul de cont este un amestec de economii, împrumut la termen și cec.

Mai întâi trebuie să configurați o secțiune de criterii pentru filtrul avansat. Puteți face acest lucru într-o foaie separată.

Pentru ușurință de referință, am denumit fișa mea de date „Baza de date” și foaia mea de criterii „Criterii”.

Sintaxă avansată de filtrare

Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique

  • The Expresie reprezintă obiectul Range - și poate fi setat ca Range (de exemplu Range („A1: A50”)) sau Range poate fi atribuit unei variabile și poate fi utilizată acea variabilă.
  • The Acțiune argumentul este necesar și va fi fie xlFilterInPlace, fie xlFilterCopy
  • The Gama de criterii argumentul este de unde obțineți criteriile de filtrare (foaia noastră de criterii de mai sus). Acest lucru este opțional, deoarece nu ați avea nevoie de un criteriu dacă ați filtra pentru valori unice, de exemplu.
  • The CopyToRange argumentul este locul în care urmează să puneți rezultatele filtrului - puteți filtra în loc sau puteți copia rezultatul filtrului într-o locație alternativă. Acesta este, de asemenea, un argument opțional.
  • The Unic argumentul este, de asemenea, opțional - Adevărat este de a filtra numai înregistrările unice, Fals este să filtrați toate înregistrările care îndeplinesc criteriile - dacă omiteți acest lucru, valoarea implicită va fi Fals.

Filtrarea datelor la locul lor

Folosind criteriile prezentate mai sus în foaia de criterii - dorim să găsim toate conturile cu un tip de „Economii” și „Curent”. Filtrăm în loc.

123456789 Sub CreateAdvancedFilter ()Dim rngDatabase as RangeDim rngCriteria As Range„definiți baza de date și intervalele de criteriiSetați rngDatabase = Sheets ("Baza de date"). Range ("A1: H50")Setați rngCriteria = Foi („Criterii”). Interval („A1: H3”)'filtrează baza de date folosind criteriilerngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaSfârșitul Sub

Codul va ascunde rândurile care nu îndeplinesc criteriile.

În procedura VBA de mai sus, nu am inclus argumentele CopyToRange sau Unique.

Resetarea datelor

Înainte de a rula un alt filtru, trebuie să îl ștergem pe cel curent. Acest lucru va funcționa numai dacă ați filtrat datele în loc.

12345 Sub ClearFilter ()La eroare Reluați în continuare'resetați filtrul pentru a afișa toate dateleActiveSheet.ShowAllDataSfârșitul Sub

Filtrarea valorilor unice

În procedura de mai jos, am inclus argumentul Unic, dar am omis argumentul CopyToRange. Dacă lăsați acest argument, voi FIE trebuie să puneți o virgulă ca deținător de loc pentru argument

123456789 Sub UniqueValuesFilter1 ()Dim rngDatabase as RangeDim rngCriteria As Range„definiți baza de date și intervalele de criteriiSetați rngDatabase = Sheets ("Baza de date"). Range ("A1: H50")Setați rngCriteria = Foi („Criterii”). Interval („A1: H3”)'filtrează baza de date folosind criteriilerngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueSfârșitul Sub

SAU trebuie să utilizați argumente denumite așa cum se arată mai jos.

123456789 Sub UniqueValuesFilter2 ()Dim rngDatabase as RangeDim rngCriteria As Range„definiți baza de date și intervalele de criteriiSetați rngDatabase = Sheets ("Baza de date"). Range ("A1: H50")Setați rngCriteria = Foi („Criterii”). Interval („A1: H3”)'filtrează baza de date folosind criteriilerngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueSfârșitul Sub

Ambele exemple de cod de mai sus vor rula același filtru, așa cum se arată mai jos - datele cu numai valori unice.

Folosind argumentul CopyTo

123456789 Sub CopyToFilter ()Dim rngDatabase as RangeDim rngCriteria As Range„definiți baza de date și intervalele de criteriiSetați rngDatabase = Sheets ("Baza de date"). Range ("A1: H50")Setați rngCriteria = Foi („Criterii”). Interval („A1: H3”)'copiați datele filtrate într-o locație alternativărngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueSfârșitul Sub

Rețineți că am fi putut omite numele argumentelor din linia de cod Advanced Filter, dar utilizarea argumentelor denumite face codul mai ușor de citit și de înțeles.

Această linie de mai jos este identică cu linia din procedura prezentată mai sus.

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

Odată ce codul este rulat, datele originale sunt încă afișate cu datele filtrate afișate în locația de destinație specificată în procedură.

Eliminarea duplicatelor din date

Putem elimina duplicatele din date omițând argumentul Criterii și copiind datele într-o locație nouă.

1234567 Sub RemoveDuplicates ()Dim rngDatabase as Range'definește baza de dateSetați rngDatabase = Sheets ("Baza de date"). Range ("A1: H50")'filtrați baza de date într-o gamă nouă, cu setul unic la adevăratrngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unic: = TrueSfârșitul Sub

wave wave wave wave wave