Разширен филтър VBA

Този урок ще обясни как да използвате метода на 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

wave wave wave wave wave