У цьому посібнику буде пояснено, як використовувати метод Advanced Filter у VBA
Розширена фільтрація в Excel дуже корисна при роботі з великою кількістю даних, де потрібно одночасно застосовувати різноманітні фільтри. Його також можна використовувати для видалення дублікатів з ваших даних. Перш ніж намагатися створити розширений фільтр у VBA, вам слід знати, як створити розширений фільтр у Excel.
Розглянемо наступний аркуш.
Ви можете відразу побачити, що є дублікати, які ви, можливо, захочете видалити. Тип рахунку - це суміш заощадження, строкової позики та чека.
Спочатку вам потрібно налаштувати розділ критеріїв для розширеного фільтра. Це можна зробити на окремому аркуші.
Для зручності я назвав свій аркуш даних «База даних», а мій лист критеріїв - «Критерії».
Розширений синтаксис фільтра
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- The Вираз представляє об'єкт діапазону - і може бути встановлений як Діапазон (наприклад, Діапазон ("A1: A50")), або Діапазон може бути призначений змінній, і цю змінну можна використовувати.
- The Дія аргумент є обов'язковим і буде або xlFilterInPlace, або xlFilterCopy
- The Діапазон критеріїв Аргумент - це те, звідки ви отримуєте Критерії для фільтрації (наш аркуш Критерії вище). Це необов’язково, оскільки вам не знадобиться критерій, якщо б ви, наприклад, фільтрували унікальні значення.
- The CopyToRange аргумент - це те місце, де ви збираєтесь розмістити результати фільтрації - ви можете фільтрувати їх на місці або скопіювати результат фільтрації в інше місце. Це також необов’язковий аргумент.
- The Унікальний аргумент також необов'язковий - Правда має фільтрувати лише унікальні записи, помилковий має фільтрувати всі записи, що відповідають критеріям - якщо ви пропустіть це, за замовчуванням буде помилковий.
Фільтрація даних на місці
Використовуючи критерії, наведені вище в аркуші з критеріями, ми хочемо знайти всі рахунки з типами "Ощадні" та "Поточні". Ми фільтруємо на місці.
123456789 | Sub CreateAdvancedFilter ()Затемнити rngDatabase як діапазонЗменшити критерії як діапазон'визначте базу даних та діапазони критеріївВстановити rngDatabase = Sheets ("База даних"). Діапазон ("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 як діапазонЗменшити критерії як діапазон'визначте базу даних та діапазони критеріївВстановити rngDatabase = Sheets ("База даних"). Діапазон ("A1: H50")Встановити rngCriteria = Аркуші ("Критерії"). Діапазон ("A1: H3")'фільтрувати базу даних за критеріямиrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueEnd Sub |
АБО вам потрібно використовувати іменовані аргументи, як показано нижче.
123456789 | Sub UniqueValuesFilter2 ()Затемнити rngDatabase як діапазонЗменшити критерії як діапазон'визначте базу даних та діапазони критеріївВстановити rngDatabase = Sheets ("База даних"). Діапазон ("A1: H50")Встановити rngCriteria = Аркуші ("Критерії"). Діапазон ("A1: H3")'фільтрувати базу даних за критеріямиrngDatabase.AdvancedFilter Дія: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueEnd Sub |
Обидва наведені вище приклади коду запускатимуть один і той же фільтр, як показано нижче - дані лише з унікальними значеннями.
Використання аргументу CopyTo
123456789 | Sub CopyToFilter ()Затемнити rngDatabase як діапазонЗменшити критерії як діапазон'визначте базу даних та діапазони критеріївВстановити rngDatabase = Sheets ("База даних"). Діапазон ("A1: H50")Встановити rngCriteria = Аркуші ("Критерії"). Діапазон ("A1: H3")'скопіювати відфільтровані дані в інше місцеrngDatabase.AdvancedFilter Дія: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Діапазон ("N1: U1"), Унікальний: = ПравдаEnd Sub |
Зауважте, що ми могли б опустити назви аргументів у рядку коду Розширений фільтр, але використання іменованих аргументів робить код легшим для читання та розуміння.
Цей рядок нижче ідентичний рядку в процедурі, показаній вище.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
Після запуску коду вихідні дані все ще відображаються з відфільтрованими даними, показаними у місці призначення, зазначеному в процедурі.
Видалення дублікатів з даних
Ми можемо видалити дублікати з даних, опустивши аргумент Критерії та скопіювавши дані на нове місце.
1234567 | Sub RemoveDuplicates ()Затемнити rngDatabase як діапазон'визначте базу данихВстановити rngDatabase = Sheets ("База даних"). Діапазон ("A1: H50")'фільтрувати базу даних до нового діапазону з унікальним значенням truerngDatabase.AdvancedFilter Дія: = xlFilterCopy, CopyToRange: = Діапазон ("N1: U1"), Унікальний: = ПравдаEnd Sub |