Шаг 33.
VBA в MSExcel.
Методы объекта Range, использующие команды Excel. Метод AdvancedFilter

    На этом шаге мы рассмотрим назначение и пример использования этого метода.

    Метод AdvancedFilter (Расширенный фильтр) является более мощным и универсальным средством фильтрации, чем метод AutoFilter. Он позволяет использовать фильтрацию по большему числу критериев, причем допустимо применение критериев, включающих формулы. Кроме того, метод AdvancedFilter позволяет фильтровать список с выводом результата фильтрации как непосредственно на том месте, где он расположен, так и в новое специфицированное место. Вручную метод запускается посредством выбора команды Данные | Фильтр | Расширенный фильтр (Data | Filter | Advanced Filter).

    Синтаксис:

  Объект.AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)

    Аргументы:

Таблица 1. Аргументы метода AdvancedFilter
Аргумент Назначение
Action Допустимые значения:: xlFilterInPiace (фильтровать список на месте) и xlFilterCopy (скопировать результат на новое место)
CriteriaRange Ссылка на диапазон с критериями
CopyToRange Если параметр Action принимает значение xlFilterCору, то он указывает диапазон, куда будет копироваться результат фильтрации
Unique Допустимые значения: True (отбирается только один вариант записи из многократно встречающихся в списке) и False (отбираются все встречающиеся записи)

    Приведем соответствие между аргументами метода AdvancedFilter и выполнением команды Данные | Фильтр | Расширенный фильтр (Data | Filter | Advanced Filter) при фильтрации базы данных регистрации туристов.

  1. Выделяем диапазон A1:G13, содержащий фильтруемую базу данных (рисунок 1).


    Рис.1. Фильтруемый список

        Прежде чем выбирать команду Данные | Фильтр | Расширенный фильтр (Data | Filter | Advanced Filter), необходимо выполнить предварительные построения по созданию диапазона критериев. Верхняя строка диапазона критериев должна содержать заголовки полей фильтруемых данных. При этом нет необходимости включать все заголовки и сохранять их порядок. В диапазон критериев также должны входить строки с условиями фильтрации. Все условия в диапазоне критериев, записанные под заголовком поля, относятся к этому полю. При применении расширенного фильтра допустима запись нескольких условий в строке диапазона критериев. Условия, расположенные в одной строке, рассматриваются как условия, объединенные логической операцией И (And), а расположенные в нескольких — логической операцией ИЛИ (Or). В данном случае под диапазон критериев отведем диапазон A16:G17. В базе данных выберем записи обо всех мужчинах, которые едут в Лондон. С этой целью в ячейку С17 диапазона критериев введем значение муж, а в ячейку D17Лондон.

  2. Выберем команду Данные | Фильтр | Расширенный фильтр (Data | Filter | Advanced Filter). Появится диалоговое окно Расширенный фильтр (Advanced Filter) (рисунок 2).


    Рис.2. Диалоговое окно Расширенный фильтр

    • Переключатели группы Обработка (Action) определяют, где будут располагаться отфильтрованные данные. В рассматриваемом случае не будем фильтровать список на месте, а скопируем результат фильтрации в другое место. Поэтому выберем переключатель Скопировать результат в другое место (Copy to Another Location). У метода AdvancedFilter за выбор местоположения результата фильтрации отвечает аргумент Action. При данном выборе переключателя аргументу Action присваивается значение xlFilterCopy.
    • В поле Исходный диапазон (List Range) вводится ссылка на диапазон с фильтруемыми данными — A1:G13. В поле Диапазон условий (Criteria Range) вводится ссылка на диапазон с критериями — A16:G17. У метода AdvancedFilter определение диапазона с критериями осуществляется с помощью аргумента CriteriaRange. Поэтому ему присваивается диапазон Range("A16:G17").
    • В поле Поместить результат в диапазон (Copy to) дается ссылка на диапазон назначения. В данном случае A19:G19. Переменной в методе AdvancedFilter, отвечающей за диапазон назначения, является CopyToRange. Поэтому ей надо присвоить диапазон Range("A19:G19").
    • Флажок Только уникальные записи (Unique Records Only) определяет, будут ли отображаться все отфильтрованные записи или только по одной из всех одинаковых записей, удовлетворяющих критерию. В данном случае снимем флажок Только уникальные записи (Unique Records Only). Поэтому параметру Unique присваиваем значение False.
    Подытожим все присвоения значений аргументов:
     Range ("A1:G13").AdvancedFilter  Action:=xlFilterCopy,  _
       CriteriaRange:=Range("A16:G17"),  CopyToRange:=Range("A19:G19"), _
       Unique:=False
    
  3. Нажатие кнопки OK приводит к фильтрации данных по указанному критерию.

    На следующем шаге мы рассмотрим метод Consolidate.




Предыдущий шаг Содержание Следующий шаг