Массивы фильтров VBA

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

Фильтр - Соответствие

По умолчанию функция фильтра VBA фильтрует массив на предмет совпадений. В приведенном ниже примере мы отфильтруем массив на совпадения со «Смитом».

1234567891011121314 Sub Filter_Match ()'Определить массивDim strNames как вариантstrNames = Array («Стив Смит», «Шеннон Смит», «Райан Джонсон»)'Массив фильтровDim strSubNames как вариантstrSubNames = Фильтр (strNames, «Смит»)'Подсчет фильтрованного массиваMsgBox «Найдено» и UBound (strSubNames) - LBound (strSubNames) + 1 & «имена».Конец подписки

Пара важных моментов:

  • Переменная отфильтрованного массива должна быть объявлена ​​как вариант типа данных, чтобы не определять размер массива.
  • По умолчанию функция фильтра чувствительна к регистру. Таким образом, фильтрация по «Смиту» дала бы другой результат, чем «Смит». Ниже мы покажем вам, как изменить этот параметр.

Фильтр - нечувствительность к регистру

По умолчанию VBA чувствителен к регистру. Это означает, что «кузнец» не равен «Смиту». Это верно для функции фильтра, а также для всех (большинства?) Других функций или сравнений VBA.

Лично я никогда не хочу, чтобы в VBA учитывался регистр, поэтому я всегда добавляю Option Compare Text в начало всех моих модулей кода. Option Compare Text указывает VBA игнорировать регистр, поэтому он не чувствителен к регистру:

1 Вариант Сравнить текст

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

1 strSubNames = Фильтр (strNames, "кузнец",, vbTextCompare)

Полный пример:

1234567891011121314 Sub Filter_MatchCase ()'Определить массивDim strNames как вариантstrNames = Array («Стив Смит», «Шеннон Смит», «Райан Джонсон»)'Массив фильтровDim strSubNames как вариантstrSubNames = Фильтр (strNames, "кузнец",, vbTextCompare)'Подсчет фильтрованного массиваMsgBox «Найдено» и UBound (strSubNames) - LBound (strSubNames) + 1 & «имена».Конец подписки

Фильтр - не соответствует

Функцию фильтра также можно использовать для идентификации элементов массива, которые НЕ НАДО соответствовать введенным критериям, задав для аргумента Include значение FALSE:

1 strSubNames = Фильтр (strNames, "Smith", ложь)

Полный пример:

1234567891011121314 Sub Filter_NoMatch ()'Определить массивDim strNames как вариантstrNames = Array («Стив Смит», «Шеннон Смит», «Райан Джонсон»)'Массив фильтровDim strSubNames как вариантstrSubNames = Фильтр (strNames, "Smith", ложь)'Подсчет фильтрованного массиваMsgBox «Найдено» и UBound (strSubNames) - LBound (strSubNames) + 1 & «имена».Конец подписки

Функция фильтра

Функция VBA Filter возвращает подмножество Array предоставленного массива строк.

Синтаксис функции фильтра:

Фильтр (SourceArray, Match, [Включить], [Сравнить])

Аргументы функции:

  • SourceArray - Исходный массив для фильтрации
  • Соответствие - Строка для поиска
  • [Включают] - ПО ЖЕЛАНИЮ ИСТИНА (возвращает совпадения), ЛОЖЬ (возвращает элементы, которые не совпадают)
  • [Сравнивать] - ПО ЖЕЛАНИЮ vbBinaryCompare - двоичное сравнение, vbTextCompare - сравнение текста, vbDatabaseCompare - сравнение баз данных
wave wave wave wave wave