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