Расширенный фильтр VBA

В этом руководстве объясняется, как использовать метод расширенного фильтра в 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Конец подписки

wave wave wave wave wave