Excel vba criteria1 array диапазон

Обновлено: 30.06.2024

Всем доброго времени суток.
Есть два весьма весомых и интересных вопросов:
1) как получить массив критериев фильтра. Т.е. фильтр может принимать в виде критерия массивы, но как его достать от туда потом?

2) как получить список возможных критериев для определенного столбца?
этот вопрос возник, потому что нужно знать ячейка скрыта потому что она не отобрана в этом столбце и есть возможность её отобразить, или эта ячейка не отобрана фильтром другого столбца и её отображать на форме не нужно!

может у ячейки есть свойство, показывающее отобрана она фильтром её столбца или нет?

Установка автофильтра в листе Excel при выгрузке данных из Access
Здравствуйте. Делаю выгрузку данных из формы аксесса в excel. Вот код выгрузки: Dim PrintRep As.

Как сделать чтобы к ComboBox применить параметры автофильтра определённого столбца таблицы EXCEL
Как сделать чтобы к ComboBox применить параметры автофильтра определённого столбца таблицы EXCEL.

В Excel при использовании через VBA автофильтра и затем его отмены на листе исчезают пользовательские формы
В Excel при использовании через VBA автофильтра и затем его отмены на листе исчезают.

Использование массива данных из ячеек для автофильтра
Друзья, добрый день! Подскажите, пожалуйста, варианты решения следующей проблемы. На одном.

спасибо, но мне кажется это не то что нужно.. в коде совсем не затронуты фильтры листа или listobject -а. =( спасибо, но мне кажется это не то что нужно.. в коде совсем не затронуты фильтры листа или listobject -а. =(

Изучение объекта Filter не даст вам никакой информации о том, что именно он может фильтровать. Вы можете получить список критериев, по которым уже проведена сортировка - это нет проблем. Но получить список потенциальных критериев вы из него не сможете (по крайней мере, чёс по свойствам и медотам не дал никакого результата, так же как и чёс по гуглю). То, что вам отображается в качестве списка с галочками, судя по всему, к объекту Filter не имеет прямого отношения. Может это какой-то отдельный объект, но я ума не приложу, что это может быть.

Фильтр на листе - это не более чем удобный способ скрыть не нужные вам строки. Они не удаляются. Они никуда не переносятся. Они просто скрыты. Что вам мешает просмотреть скрытые строки и на этом основании сделать вывод, что было отфильтровано?

выражение: выражение, возвращающее объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Field Необязательный Variant Целочисленное смещение поля, на основе которого требуется создать фильтр (слева от списка; крайнее левое поле — значение 1).
Criteria1 Необязательный Variant Условия (строка, например "101"). Используйте "=" для поиска пустых полей, "<>" для поиска непустых полей и "><" для выбора полей (Нет данных) в типах данных.

Возвращаемое значение

Примечания

Если опустить все аргументы, этот метод просто переключает отображение стрелок раскрывающихся списков автофильтров в указанном диапазоне.

В Excel для Mac этот метод не поддерживается. Поддерживаются аналогичные методы для Selection и ListObject.

В отличие от формул, во вложенных полях не требуется использовать квадратные скобки для добавления пробелов.

Пример

В этом примере выполняется фильтрация списка, начинающегося в ячейке A1 на листе "Лист1", чтобы отображались только те записи, в которых первое поле содержит строку "Otis". Стрелка раскрывающегося списка для поля 1 будет скрыта.

В этом примере выполняется фильтрация списка, начинающегося с ячейки A1 на листе "Лист1", для отображения только тех записей, в которых значения первого поля содержат вложенное поле Admin Division 1 (State/province/other) со значением "Washington".

В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения только тех записей, в которых значения первого поля соответствуют отображаемому значению: 1, 3, Seattle или Redmond.

Типы данных могут применять несколько фильтров вложенных полей. В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения только тех записей, в которых значения первого поля содержат вложенное поле Time zone(s) со значением "Pacific Time Zone", а вложенное поле Date Founded содержит значение 1851 или "(No Data)".

В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения первых 10 записей для первого поля на основе вложенного поля Population.

В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения всех записей января и февраля 2019 г. для поля 1. При этом не требуется наличие строки, содержащей 31 января.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Чтобы скопировать значения из диапазона ячеек в массив, необходимо объявить переменную универсального типа (As Variant) и присвоить ей значения диапазона ячеек с помощью оператора присваивания (=):

VBA Excel автоматически преобразует объявленную переменную в двумерный массив, соответствующий размерности диапазона ячеек, в нашем случае в массив — a(1 To 3, 1 To 3), и заполняет его значениями. Нумерация измерений массивов, созданных таким образом, начинается с единицы (1).

Можно, в этом случае, объявить сразу динамический массив, чтобы изначально указать, что эта переменная будет массивом. Так как свойством диапазона ячеек по-умолчанию в VBA Excel является значение (Value), его можно в коде явно не указывать, но, при желании, можно и указать. Получится такая конструкция, аналогичная первой:

Копирование значений из массива в диапазон ячеек

Значения в диапазон ячеек добавляются из массива с помощью оператора присваивания (=):

Обратите внимание, что вставить значения в диапазон ячеек можно только из двумерного массива. Размерность такого массива может начинаться с нуля (0). Количество элементов в измерениях массива должно совпадать с количеством строк и столбцов в диапазоне ячеек. Если вам нужно вставить значения в одну строку или в один столбец, укажите размерность единственной строки или единственного столбца как (0) или (1 To 1), если вы хотите использовать нумерацию измерений своего массива с единицы. Например, для записи десяти значений из массива в одну строку можно объявить такой массив — massiv(9, 0), или в один столбец — massiv(0, 9).

Для вставки значений в диапазон ячеек из массива идеально подойдет массив, созданный для копирования в него значений из диапазона. В этом случае, данные с рабочего листа Excel переносятся в массив, обрабатываются и, после обработки, вставляются обратно в ту же или другую таблицу на том же или другом рабочем листе.

Простейшие примеры обмена значениями

Эти примеры составлены так, чтобы вам не пришлось совершать лишних действий, просто скопируйте их в свой модуль любой книги Excel с поддержкой макросов и запустите по-очереди на выполнение.

Пример 1

Заполнение двумерного массива значениями и и их присвоение диапазону ячеек на рабочем листе Excel:

Итог: научиться создавать макросы, использовать фильтры на диапазоны и таблицы с помощью метода AutoFilter VBA. Статья содержит ссылки на примеры для фильтрации различных типов данных, включая текст, цифры, даты, цвета и значки.

Уровень мастерства: средний

Automate Filters with VBA Macros - AutoFilter Guide

Файл Excel, содержащий код, можно скачать ниже. Этот файл содержит код для фильтрации различных типов данных и типов фильтров.

VBA AutoFilters Guide.xlsm (100.5 KB)

Написание макросов для фильтров

Фильтры являются отличным инструментом для анализа данных в Excel. Для большинства аналитиков и частых пользователей Excel фильтры являются частью нашей повседневной жизни. Мы используем раскрывающиеся меню фильтров для применения фильтров к отдельным столбцам в наборе данных. Это помогает нам связывать цифры с отчетами и проводить исследование наших данных.

How Often Do You Apply Excel Filters

Фильтрация также может быть трудоемким процессом. Особенно, когда мы применяем фильтры к нескольким столбцам на больших листах или фильтруем данные, чтобы затем копировать / вставлять их в другие листы или книги.

В этой статье объясняется, как создавать макросы для автоматизации процесса фильтрации. Это обширное руководство по методу автофильтра в VBA.

У меня также есть статьи с примерами для различных фильтров и типов данных, в том числе: пробелы, текст, числа, даты, цвета и значки, и очищающие фильтры.

Мы можем легко получить код VBA для фильтров, включив макро-рекордер, а затем применив один или несколько фильтров к диапазону / таблице.

Вот шаги для создания макроса фильтра с помощью устройства записи макросов:

  1. Включите рекордер макросов:
    1. Вкладка «Разработчик»> «Запись макроса».
    2. Дайте макросу имя, выберите, где вы хотите сохранить код, и нажмите ОК.

    Если вы уже использовали макрос-рекордер для этого процесса, то вы знаете, насколько он может быть полезен. Тем более, что наши критерии фильтрации становятся более сложными.

    Код будет выглядеть примерно так:

    Мы видим, что каждая строка использует метод AutoFilter для применения фильтра к столбцу. Он также содержит информацию о критериях фильтра.

    Мы видим, что каждая строка использует метод AutoFilter для применения фильтра к столбцу. Он также содержит информацию о критериях фильтра.

    Метод автофильтрации

    Метод AutoFilter используется для очистки и применения фильтров к одному столбцу в диапазоне или таблице в VBA. Он автоматизирует процесс применения фильтров через выпадающие меню фильтров и делает, чтобы все работало.

    VBA AutoFilter Automates Filter Drop-down Menus

    Его можно использовать для применения фильтров к нескольким столбцам путем написания нескольких строк кода, по одной для каждого столбца. Мы также можем использовать Автофильтр, чтобы применить несколько критериев фильтрации к одному столбцу, так же, как в выпадающем меню фильтра, установив несколько флажков или указав диапазон дат.

    Написание кода автофильтра

    Вот пошаговые инструкции по написанию строки кода для автофильтра.

    Шаг 1: Ссылка на диапазон или таблицу

    Метод AutoFilter является частью объекта Range. Поэтому мы должны ссылаться на диапазон или таблицу, к которым применяются фильтры на листе. Это будет весь диапазон, к которому применяются фильтры.

    AutoFilter Method is Member of Range Object

    Следующие примеры включают / отключают фильтры в диапазоне B3: G1000 на листе автофильтра.

    Вот пример использования таблиц Excel.

    Метод AutoFilter имеет 5 необязательных параметров, которые мы рассмотрим далее. Если мы не укажем ни один из параметров, как в приведенных выше примерах, метод AutoFilter включит / выключит фильтры для указанного диапазона. Это переключение. Если фильтры включены, они будут выключены, и наоборот.

    Диапазоны или таблицы?

    Фильтры работают одинаково как для обычных диапазонов, так и для таблиц Excel.

    AutoFilter on Regular Range or Excel Table

    Я отдаю предпочтение методу использования таблиц, потому что нам не нужно беспокоиться об изменении ссылок на диапазон при увеличении или уменьшении таблицы. Однако код будет одинаковым для обоих объектов. В остальных примерах кода используются таблицы Excel, но вы можете легко изменить это для обычных диапазонов.

    5 (или 6) параметров автофильтра

    Метод AutoFilter имеет 5 (или 6) необязательных параметров, которые используются для указания критериев фильтрации для столбца. Вот список параметров.

    AutoFilter Parameters Optional Screentip in VB Editor VBA
    Фильтры на VBA (AutoFilter Method) читать подробное руководство

    Мы можем использовать комбинацию этих параметров, чтобы применять различные критерии фильтрации для разных типов данных. Первые четыре являются наиболее важными, поэтому давайте посмотрим, как их применять.

    Шаг 2: Параметр поля

    В приведенном ниже примере поле 4 является столбцом «Продукт», поскольку это 4-й столбец в диапазоне фильтра / таблице.

    Field Parameter Value is Column Number of the Range or Table

    Фильтр столбца очищается, когда мы указываем только параметр Field, а другие критерии отсутствуют.

    Field Parameter Only Clears Single Column Filter

    Мы также можем использовать переменную для параметра Field и установить ее динамически. Я объясню это более подробно ниже.

    Шаг 3: Параметры критериев

    Существует два параметра, которые можно использовать для указания фильтра Критерии, Criteria1 и Criteria2 . Мы используем комбинацию этих параметров и параметра Operator для разных типов фильтров. Здесь все становится сложнее, поэтому давайте начнем с простого примера.

    Это то же самое, что выбрать один элемент из списка флажков в раскрывающемся меню фильтра.

    VBA AutoFilter Code to Filter for Single Item in Filter Drop-down Menu

    Общие правила для Criteria1 и Criteria2

    Значения, которые мы указываем для Criteria1 и Criteria2, могут быть хитрыми. Вот несколько общих рекомендаций о том, как ссылаться на значения параметра Criteria.

    • Значением критерия является строка, заключенная в кавычки. Есть несколько исключений, когда критерии являются постоянными для периода времени даты и выше / ниже среднего.
    • При указании фильтров для отдельных чисел или дат форматирование чисел должно соответствовать форматированию чисел, применяемому в диапазоне / таблице.
    • Оператор сравнения больше / меньше чем также включен в кавычки перед числом.
    • Кавычки также используются для фильтров для пробелов «=» и не пробелов «<>».

    Шаг 4: Параметр оператора

    Что если мы хотим выбрать несколько элементов из раскрывающегося списка фильтров? Или сделать фильтр для диапазона дат или чисел?

    Для этого нам нужен Operator . Параметр Operator используется для указания типа фильтра, который мы хотим применить. Он может варьироваться в зависимости от типа данных в столбце. Для
    Operator должна использоваться одна из следующих 11 констант.

    Фильтры на VBA (AutoFilter Method) читать подробное руководство

    Вот ссылка на страницу справки MSDN, которая содержит список констант для перечисления XlAutoFilterOperator.

    Operator используется в сочетании с Criteria1 и / или Criteria2, в зависимости от типа данных и типа фильтра. Вот несколько примеров.

    Это основы написания строки кода для метода AutoFilter. Будет сложнее с различными типами данных.

    Итак, я привел много примеров ниже, которые содержат большинство комбинаций критериев и операторов для разных типов фильтров.

    Автофильтр не является дополнением

    При запуске строки кода автофильтра сначала удаляются все фильтры, примененные к этому столбцу (полю), а затем применяются критерии фильтра, указанные в строке кода.

    Это означает, что это не дополнение. Следующие 2 строки НЕ создадут фильтр для Продукта 1 и Продукта 2. После запуска макроса столбец Продукт будет отфильтрован только для Продукта 2.

    Если вы хотите применить фильтр с несколькими критериями к одному столбцу, вы можете указать это с помощью параметров
    Criteria и Operator .

    Как установить номер поля динамически

    Если мы добавим / удалим / переместим столбцы в диапазоне фильтра, то номер поля для отфильтрованного столбца может измениться. Поэтому я стараюсь по возможности избегать жесткого кодирования числа для параметра Field.

    Вместо этого мы можем использовать переменную и использовать некоторый код, чтобы найти номер столбца по его имени. Вот два примера для обычных диапазонов и таблиц.

    Use Variable for Filter Field Column Number in VBA with Index Property

    Номер столбца будет найден при каждом запуске макроса. Нам не нужно беспокоиться об изменении номера поля при перемещении столбца. Это экономит время и предотвращает ошибки (беспроигрышный вариант)!

    Используйте таблицы Excel с фильтрами

    Использование таблиц Excel дает множество преимуществ, особенно при использовании метода автофильтрации. Вот несколько основных причин, по которым я предпочитаю таблицы.

    • Нам не нужно переопределять диапазон в VBA, поскольку диапазон данных изменяет размер (строки / столбцы добавляются / удаляются). На всю таблицу ссылается объект ListObject.
    • Данные в таблице легко ссылаться после применения фильтров. Мы можем использовать свойство DataBodyRange для ссылки на видимые строки для копирования / вставки, форматирования, изменения значений и т.д.
    • Мы можем иметь несколько таблиц на одном листе и, следовательно, несколько диапазонов фильтров. С обычными диапазонами у нас может быть только один отфильтрованный диапазон на лист.
    • Код для очистки всех фильтров в таблице легче написать.

    Фильтры и типы данных

    Параметры раскрывающегося меню фильтра изменяются в зависимости от типа данных в столбце. У нас есть разные фильтры для текста, чисел, дат и цветов. Это создает МНОГО различных комбинаций операторов и критериев для каждого типа фильтра.

    Я создал отдельные посты для каждого из этих типов фильтров. Посты содержат пояснения и примеры кода VBA.

    Файл в разделе загрузок выше содержит все эти примеры кода в одном месте. Вы можете добавить его в свою личную книгу макросов и использовать макросы в своих проектах.

    Почему метод автофильтрации такой сложный?

    Этот пост был вдохновлен вопросом от Криса, участника The VBA Pro Course. Комбинации Критерии и Операторы могут быть запутанными и сложными. Почему это?

    Ну, фильтры развивались на протяжении многих лет. Мы увидели много новых типов фильтров, представленных в Excel 2010, и эта функция продолжает улучшаться. Однако параметры метода автофильтра не изменились. Они отлично подходят для совместимости со старыми версиями, но также означает, что новые типы фильтров работают с существующими параметрами.

    Большая часть кода фильтра имеет смысл, но сначала может быть сложно разобраться. К счастью, у нас есть макро рекордер, чтобы помочь с этим.

    Я надеюсь, что вы можете использовать эту статью и файл Excel в качестве руководства по написанию макросов для фильтров. Автоматизация фильтров может сэкономить нам и нашим пользователям массу времени, особенно при использовании этих методов в более крупном проекте автоматизации данных.

    Читайте также: