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 |