В Функция фильтра 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 - сравнение баз данных