Šioje pamokoje bus paaiškinta, kaip naudoti išplėstinio filtro metodą VBA
Išplėstinis filtravimas „Excel“ yra labai naudingas tvarkant didelius duomenų kiekius, kai tuo pačiu metu norite taikyti įvairius filtrus. Jis taip pat gali būti naudojamas pasikartojantiems duomenims pašalinti. Prieš bandydami sukurti išplėstinį filtrą iš VBA, turite žinoti, kaip sukurti išplėstinį filtrą „Excel“.
Apsvarstykite šį darbalapį.
Iš pirmo žvilgsnio matote, kad yra dublikatų, kuriuos galbūt norėsite pašalinti. Sąskaitos tipas yra taupymo, termino paskolos ir čekio mišinys.
Pirmiausia turite nustatyti išplėstinio filtro kriterijų skyrių. Tai galite padaryti atskirame lape.
Kad būtų lengviau naudotis, savo duomenų lapą pavadinau „Duomenų bazė“, o kriterijų lapą - „Kriterijai“.
Išplėstinė filtro sintaksė
Išraiška. Išplėstinis filtro veiksmas, kriterijų diapazonas, „CopyToRange“, unikalus
- The Išraiška žymi diapazono objektą - ir gali būti nustatytas kaip diapazonas (pvz., diapazonas („A1: A50“)) - arba diapazonas gali būti priskirtas kintamajam ir tą kintamąjį galima naudoti.
- The Veiksmas argumentas yra būtinas ir bus arba xlFilterInPlace, arba xlFilterCopy
- The Kriterijų diapazonas Argumentas yra vieta, iš kurios norite filtruoti kriterijus (mūsų kriterijų lapas aukščiau). Tai neprivaloma, nes jums nereikėtų kriterijų, jei, pavyzdžiui, filtruotumėte unikalias vertes.
- The CopyToRange argumentas yra vieta, kur ketinate įdėti filtro rezultatus - galite filtruoti vietoje arba nukopijuoti filtro rezultatą į kitą vietą. Tai taip pat neprivalomas argumentas.
- The Unikalus argumentas taip pat neprivalomas - Tiesa filtruoti tik unikalius įrašus, Netiesa yra filtruoti visus įrašus, kurie atitinka kriterijus - jei to praleisite, numatytasis bus Netiesa.
Filtruoti duomenis vietoje
Naudodamiesi kriterijų lape aukščiau nurodytais kriterijais - norime rasti visas sąskaitas, kurių tipas yra „Taupymas“ ir „Dabartinis“. Mes filtruojame vietoje.
123456789 | Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range“apibrėžti duomenų bazę ir kriterijų diapazonusNustatykite rngDatabase = Sheets ("Duomenų bazė"). Diapazonas ("A1: H50")Nustatykite rngCriteria = Sheets („Kriterijai“). Diapazonas („A1: H3“)“filtruokite duomenų bazę pagal kriterijusrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaPabaiga Sub |
Kodas paslėps kriterijus neatitinkančias eilutes.
Į aukščiau pateiktą VBA procedūrą neįtraukėme „CopyToRange“ ar „Unique“ argumentų.
Duomenų nustatymas iš naujo
Prieš paleisdami kitą filtrą, turime išvalyti esamą. Tai veiks tik tuo atveju, jei vietoje filtruosite savo duomenis.
12345 | Sub ClearFilter ()Dėl klaidos Tęsti toliauiš naujo nustatykite filtrą, kad būtų rodomi visi duomenysActiveSheet.ShowAllDataPabaiga Sub |
Unikalių vertybių filtravimas
Toliau pateiktoje procedūroje aš įtraukiau unikalų argumentą, bet neįtraukiau argumento „CopyToRange“. Jei atsisakysite šio argumento, jūs BUVO turi pateikti kablelį kaip argumento vietą
123456789 | Antrinės unikalios vertės1 filtras ()Dim rngDatabase As RangeDim rngCriteria As Range“apibrėžti duomenų bazę ir kriterijų diapazonusNustatykite rngDatabase = Sheets ("Duomenų bazė"). Diapazonas ("A1: H50")Nustatykite rngCriteria = Sheets („Kriterijai“). Diapazonas („A1: H3“)“filtruokite duomenų bazę pagal kriterijusrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TiesaPabaiga Sub |
ARBA turite naudoti pavadintus argumentus, kaip parodyta žemiau.
123456789 | Antrinės unikalios vertės2 filtras ()Dim rngDatabase As RangeDim rngCriteria As Range“apibrėžti duomenų bazę ir kriterijų diapazonusNustatykite rngDatabase = Sheets ("Duomenų bazė"). Diapazonas ("A1: H50")Nustatykite rngCriteria = Sheets („Kriterijai“). Diapazonas („A1: H3“)“filtruokite duomenų bazę pagal kriterijusrngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TruePabaiga Sub |
Abiejuose aukščiau pateiktuose kodo pavyzdžiuose bus naudojamas tas pats filtras, kaip parodyta žemiau - duomenys, turintys tik unikalias reikšmes.
„CopyTo“ argumento naudojimas
123456789 | Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range“apibrėžti duomenų bazę ir kriterijų diapazonusNustatykite rngDatabase = Sheets ("Duomenų bazė"). Diapazonas ("A1: H50")Nustatykite rngCriteria = Sheets („Kriterijai“). Diapazonas („A1: H3“)“nukopijuokite filtruotus duomenis į kitą vietąrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Diapazonas ("N1: U1"), Unikalus: = TiesaPabaiga Sub |
Atminkite, kad mes galėjome praleisti argumentų pavadinimus išplėstinio filtro kodo eilutėje, tačiau naudojant pavadintus argumentus, kodą lengviau skaityti ir suprasti.
Ši žemiau esanti eilutė yra identiška aukščiau pateiktos procedūros eilutei.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), tiesa |
Kai kodas bus paleistas, pradiniai duomenys vis tiek bus rodomi kartu su filtruotais duomenimis, nurodytais procedūroje nurodytoje paskirties vietoje.
Dublikatų pašalinimas iš duomenų
Galime pašalinti duomenų dublikatus, praleisdami argumentą Kriterijai ir nukopijuodami duomenis į naują vietą.
1234567 | Sub RemoveDuplicates ()Dim rngDatabase As Range“apibrėžti duomenų bazęNustatykite rngDatabase = Sheets ("Duomenų bazė"). Diapazonas ("A1: H50")“filtruokite duomenų bazę į naują diapazoną, kurio unikalus nustatymas yra„ true “rngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Diapazonas ("N1: U1"), Unikalus: = TiesaPabaiga Sub |