The Функція фільтра VBA дозволяє швидко фільтрувати масиви. При фільтрації масивів слід враховувати кілька параметрів. Ми обговоримо їх нижче.
Фільтр - збіг
За замовчуванням функція фільтрації VBA фільтруватиме масив для збігів. У наведеному нижче прикладі ми будемо фільтрувати масив для збігів із “Смітом”.
1234567891011121314 | Додатковий фільтр_відповідності ()'Визначте масивЗатемнити strNames як варіантstrNames = Array ("Стів Сміт", "Шеннон Сміт", "Райан Джонсон")'Масив фільтрівЗатемнити strSubNames як варіантstrSubNames = Фільтр (strNames, "Сміт")"Порахувати відфільтрований масивMsgBox "Знайдено" & UBound (strSubNames) - LBound (strSubNames) + 1 & "імена".End Sub |
Кілька важливих моментів:
- Змінна відфільтрованого масиву повинна бути оголошена як варіант типу даних, щоб уникнути визначення розміру масиву.
- За замовчуванням функція фільтра чутлива до регістру. Тож фільтрація за "ковалем" дасть інший результат, ніж "Сміт". Нижче ми покажемо вам, як змінити це налаштування.
Фільтр - Нечутливий до регістру
За замовчуванням VBA чутливий до регістру. Це означає, що "коваль" не дорівнює "Сміту". Це стосується функції фільтра, а також усіх (більшості?) Інших функцій VBA або порівнянь.
Особисто я ніколи не хочу, щоб VBA чутливий до регістру, тому я завжди додаю Option Compare Text у верхню частину всіх своїх модулів коду. Параметр "Порівняти текст" повідомляє VBA ігнорувати регістр, щоб він не враховував регістр:
1 | Опція Порівняти текст |
Додавання опції порівняння тексту у верхній частині вашого модуля зробить функцію фільтра нечутливою. Крім того, ви можете сказати, що сама функція фільтра нечутлива до регістру за допомогою аргументу vbTextCompare:
1 | strSubNames = Фільтр (strNames, "smith",, vbTextCompare) |
Повний приклад:
1234567891011121314 | Sub Filter_MatchCase ()'Визначте масивЗатемнити strNames як варіантstrNames = Array ("Стів Сміт", "Шеннон Сміт", "Райан Джонсон")'Масив фільтрівЗатемнити strSubNames як варіантstrSubNames = Фільтр (strNames, "smith",, vbTextCompare)"Порахувати відфільтрований масивMsgBox "Знайдено" & UBound (strSubNames) - LBound (strSubNames) + 1 & "імена".End Sub |
Фільтр - не відповідає
Функцію фільтра також можна використовувати для ідентифікації елементів масиву, які НЕ відповідають введеним критеріям, встановивши для аргументу Включити значення FALSE:
1 | strSubNames = Фільтр (strNames, "Smith", False) |
Повний приклад:
1234567891011121314 | Sub Filter_NoMatch ()'Визначте масивЗатемнити strNames як варіантstrNames = Array ("Стів Сміт", "Шеннон Сміт", "Райан Джонсон")'Масив фільтрівЗатемнити strSubNames як варіантstrSubNames = Фільтр (strNames, "Smith", False)"Порахувати відфільтрований масивMsgBox "Знайдено" & UBound (strSubNames) - LBound (strSubNames) + 1 & "імена".End Sub |
Функція фільтра
Функція VBA Filter повертає підмножину Array поставленого рядкового масиву.
Синтаксис функції фільтра:
Фільтр (SourceArray, Match, [Включити], [Порівняти])
Аргументами функції є:
- ДжерелоМасив - Оригінальний масив для фільтрації
- Матч - Рядок для пошуку
- [Включати] - НЕОБОВ'ЯЗКОВО TRUE (повертає збіги), FALSE (повертає елементи, які не збігаються)
- [Порівняти] - НЕОБОВ'ЯЗКОВО vbBinaryCompare - двійкове порівняння, vbTextCompare - порівняння тексту, vbDatabaseCompare - порівняння бази даних