Ez az oktatóanyag elmagyarázza, hogyan kell használni a speciális szűrő módszert a VBA -ban
Az Excel speciális szűrése nagyon hasznos nagy adatmennyiségek kezelésekor, ahol különböző szűrőket szeretne egyszerre alkalmazni. Használható az ismétlődések eltávolítására is az adatokból. Mielőtt megpróbálna speciális szűrőt létrehozni a VBA -ból, ismernie kell az Excel speciális szűrő létrehozását.
Tekintsük a következő munkalapot.
Egy pillantással láthatja, hogy vannak ismétlődések, amelyeket esetleg el szeretne távolítani. A számla típusa a megtakarítás, a futamidő kölcsön és a csekk keveréke.
Először létre kell hoznia egy kritérium részt a speciális szűrőhöz. Ezt külön lapon teheti meg.
A könnyebb áttekinthetőség kedvéért az adatlapomat „Adatbázis” -nak, a kritériumlapomat pedig „Kritériumoknak” neveztem el.
Speciális szűrő szintaxis
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, egyedi
- Az Kifejezés a tartományobjektumot képviseli - és tartományként állítható be (pl. tartomány („A1: A50”)) - vagy a tartomány hozzárendelhető egy változóhoz, és ez a változó használható.
- Az Akció argumentum szükséges, és az xlFilterInPlace vagy xlFilterCopy lesz
- Az Kritériumok tartománya érv az, ahonnan a kritériumokat szűrni szeretné (fenti kritériumlapunk). Ez opcionális, mivel nem kell feltétel, ha például egyedi értékeket szűr.
- Az CopyToRange érv az, ahová a szűrési eredményeket helyezi - szűrheti a helyére, vagy másolhatja a szűrési eredményt egy másik helyre. Ez szintén opcionális érv.
- Az Egyedi az érv is opcionális - Igaz csak egyedi rekordokra szűr, Hamis az összes olyan rekordot szűrni, amelyek megfelelnek a feltételeknek - ha ezt kihagyja, az alapértelmezett lesz Hamis.
Adatok szűrése a helyén
A kritériumlapon fent bemutatott kritériumok segítségével szeretnénk megtalálni az összes olyan fiókot, amely „Megtakarítás” és „Aktuális” típusú. A helyén szűrünk.
123456789 | Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'határozza meg az adatbázist és a kritériumtartományokatÁllítsa be az rngDatabase = Sheets ("Database"). Tartomány ("A1: H50")Állítsa be az rngCriteria = Sheets ("Feltételek"). Tartomány ("A1: H3")'szűrje az adatbázist a feltételek alapjánrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEnd Sub |
A kód elrejti azokat a sorokat, amelyek nem felelnek meg a feltételeknek.
A fenti VBA eljárásban nem vettük fel a CopyToRange vagy az Unique érveket.
Az adatok visszaállítása
Mielőtt újabb szűrőt futtatnánk, törölnünk kell az aktuális szűrőt. Ez csak akkor működik, ha a helyén szűrte az adatokat.
12345 | Sub ClearFilter ()Hiba esetén Folytassa a következőt'állítsa vissza a szűrőt, hogy az összes adat megjelenjenActiveSheet.ShowAllDataEnd Sub |
Egyedi értékek szűrése
Az alábbi eljárásba belefoglaltam az Egyedi érvet, de kihagytam a CopyToRange argumentumot. Ha kihagyja ezt az érvet, akkor BÁRMELYIK vesszőt kell elhelyezni az érvelés helyén
123456789 | Egyedi értékek szűrője1 ()Dim rngDatabase As RangeDim rngCriteria As Range'határozza meg az adatbázist és a kritériumtartományokatÁllítsa be az rngDatabase = Sheets ("Database"). Tartomány ("A1: H50")Állítsa be az rngCriteria = Sheets ("Feltételek"). Tartomány ("A1: H3")'szűrje az adatbázist a feltételek alapjánrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, IgazEnd Sub |
VAGY elnevezett argumentumokat kell használnia az alábbiak szerint.
123456789 | UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range'határozza meg az adatbázist és a kritériumtartományokatÁllítsa be az rngDatabase = Sheets ("Database"). Tartomány ("A1: H50")Állítsa be az rngCriteria = Sheets ("Feltételek"). Tartomány ("A1: H3")'szűrje az adatbázist a feltételek alapjánrngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueEnd Sub |
Mindkét fenti kódpélda ugyanazt a szűrőt futtatja, amint az alább látható - az adatok csak egyedi értékekkel rendelkeznek.
A CopyTo argumentum használata
123456789 | Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'határozza meg az adatbázist és a kritériumtartományokatÁllítsa be az rngDatabase = Sheets ("Database"). Tartomány ("A1: H50")Állítsa be az rngCriteria = Sheets ("Feltételek"). Tartomány ("A1: H3")'másolja a szűrt adatokat egy másik helyrerngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Tartomány ("N1: U1"), Egyedi: = IgazEnd Sub |
Ne feledje, hogy kihagyhattuk az argumentumok nevét a Speciális szűrő kódsorában, de a megnevezett argumentumok használata megkönnyíti a kód olvasását és megértését.
Ez az alábbi sor megegyezik a fent bemutatott eljárás sorával.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
A kód futtatása után az eredeti adatok továbbra is megjelennek az eljárásban megadott célhelyen megjelenített szűrt adatokkal.
Ismétlődések eltávolítása az adatokból
Az ismétlődéseket eltávolíthatjuk az adatokból, ha kihagyjuk a Criteria argumentumot, és az adatokat egy új helyre másoljuk.
1234567 | Sub RemoveDuplicates ()Dim rngDatabase As Range'határozza meg az adatbázistÁllítsa be az rngDatabase = Sheets ("Database"). Tartomány ("A1: H50")'szűrje az adatbázist egy új tartományba, amelynek egyedi értéke truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Tartomány ("N1: U1"), Egyedi: = IgazEnd Sub |