Този урок ще обясни как да използвате метода на Advanced Filter във VBA
Разширеното филтриране в Excel е много полезно при работа с големи количества данни, когато искате да приложите различни филтри едновременно. Може да се използва и за премахване на дубликати от вашите данни. Трябва да сте запознати със създаването на разширен филтър в Excel, преди да се опитате да създадете разширен филтър от VBA.
Помислете за следния работен лист.
Можете да видите с един поглед, че има дубликати, които може да искате да премахнете. Видът на сметката е комбинация от спестяване, срочен заем и чек.
Първо трябва да настроите раздел с критерии за разширения филтър. Можете да направите това в отделен лист.
За улеснение, аз нарекох моя лист с данни „База данни“, а моя критериен лист „Критерии“.
Разширен синтаксис на филтъра
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- The Израз представлява обекта на диапазона - и може да бъде зададен като диапазон (напр. диапазон („A1: A50”)) - или диапазонът може да бъде присвоен на променлива и тази променлива може да се използва.
- The Действие аргументът е задължителен и ще бъде или xlFilterInPlace, или xlFilterCopy
- The Обхват на критериите Аргументът е мястото, от което получавате Критериите за филтриране (нашият лист с критерии по -горе). Това е по избор, тъй като няма да се нуждаете от критерии, ако например филтрирате за уникални стойности.
- The CopyToRange Аргументът е мястото, където ще поставите резултатите си от филтриране - можете да филтрирате на място или можете да копирате резултата си от филтър на друго място. Това също е незадължителен аргумент.
- The Единствен по рода си аргументът също е по избор - Вярно е да се филтрира само по уникални записи, Фалшиво е да филтрирате всички записи, които отговарят на критериите - ако пропуснете това, по подразбиране ще бъде Фалшиво.
Филтриране на данни на място
Използвайки критериите, показани по -горе в листа с критерии - искаме да намерим всички сметки с тип „Спестявания“ и „Текущи“. Филтрираме на място.
123456789 | Sub CreateAdvancedFilter ()Затъмнете rngDatabase като диапазонDim rngCriteria As Range'определяне на базата данни и диапазони на критерииЗадайте rngDatabase = Sheets ("Database"). Range ("A1: H50")Задайте rngCriteria = Листове ("Критерии"). Обхват ("A1: H3")„филтрирайте базата данни, като използвате критериитеrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaEnd Sub |
Кодът ще скрие редовете, които не отговарят на критериите.
В горната процедура VBA не включихме аргументите CopyToRange или Unique.
Нулиране на данните
Преди да стартираме друг филтър, трябва да изчистим текущия. Това ще работи само ако сте филтрирали данните си на място.
12345 | Sub ClearFilter ()На грешка възобновяване следващо'нулирайте филтъра, за да покажете всички данниActiveSheet.ShowAllDataEnd Sub |
Филтриране на уникални стойности
В процедурата по -долу включих аргумента Unique, но пропуснах аргумента CopyToRange. Ако изоставите този аргумент, вие ИЛИ трябва да поставите запетая като задържател на аргумента
123456789 | Sub UniqueValuesFilter1 ()Затъмнете rngDatabase като диапазонDim rngCriteria As Range'дефинирайте базата данни и критериитеЗадайте rngDatabase = Sheets ("Database"). Range ("A1: H50")Задайте rngCriteria = Листове ("Критерии"). Диапазон ("A1: H3")„филтрирайте базата данни, като използвате критериитеrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, ВярноEnd Sub |
ИЛИ трябва да използвате наименувани аргументи, както е показано по -долу.
123456789 | Sub UniqueValuesFilter2 ()Затъмнете rngDatabase като диапазонDim rngCriteria As Range'дефинирайте базата данни и критериитеЗадайте rngDatabase = Sheets ("Database"). Range ("A1: H50")Задайте rngCriteria = Листове ("Критерии"). Диапазон ("A1: H3")„филтрирайте базата данни, като използвате критериитеrngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueEnd Sub |
И двата примера с код по -горе ще изпълняват същия филтър, както е показано по -долу - данните само с уникални стойности.
Използване на аргумента CopyTo
123456789 | Sub CopyToFilter ()Затъмнете rngDatabase като диапазонDim rngCriteria As Range'дефинирайте базата данни и критериитеЗадайте rngDatabase = Sheets ("Database"). Range ("A1: H50")Задайте rngCriteria = Листове ("Критерии"). Диапазон ("A1: H3")'копирайте филтрираните данни на друго мястоrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueEnd Sub |
Обърнете внимание, че можехме да пропуснем имената на аргументите в реда за разширен филтър на кода, но използването на именовани аргументи прави кода по -лесен за четене и разбиране.
Този ред по -долу е идентичен с реда в процедурата, показана по -горе.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
След като кодът бъде пуснат, първоначалните данни все още се показват с филтрираните данни, показани на местоназначението, посочено в процедурата.
Премахване на дубликати от данните
Можем да премахнем дубликати от данните, като пропуснем аргумента Criteria и копираме данните на ново място.
1234567 | Sub RemoveDuplicates ()Затъмнете rngDatabase като диапазон'определете базата данниЗадайте rngDatabase = Sheets ("Database"). Range ("A1: H50")'филтрирайте базата данни до нов диапазон с уникален набор на truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueEnd Sub |