The Функция за филтър VBA ви позволява бързо да филтрирате масиви. Когато филтрирате масиви, трябва да имате предвид няколко настройки. Ще ги обсъдим по -долу.
Филтър - Съвпадение
По подразбиране функцията за филтриране на VBA ще филтрира масив за съвпадения. В примера по -долу ще филтрираме масива за съвпадения със „Smith“.
1234567891011121314 | Sub Filter_Match ()„Определете масивDim strNames As VariantstrNames = Array („Стив Смит“, „Шанън Смит“, „Райън Джонсън“)„Филтриращ масивЗатъмнете strSubNames като вариантstrSubNames = Филтър (strNames, "Smith")„Брой филтрирани масиви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 ()„Определете масивDim strNames As VariantstrNames = Array („Стив Смит“, „Шанън Смит“, „Райън Джонсън“)„Филтриращ масивЗатъмнете strSubNames като вариантstrSubNames = Филтър (strNames, "smith",, vbTextCompare)„Брой филтрирани масивиMsgBox "Намерено" & UBound (strSubNames) - LBound (strSubNames) + 1 & "имена."End Sub |
Филтър - не съвпада
Функцията за филтриране може да се използва и за идентифициране на елементи от масива, които НЕДЕЙ съвпадат с въведените критерии, като зададете аргумента Включване на FALSE:
1 | strSubNames = Филтър (strNames, "Smith", False) |
Пълен пример:
1234567891011121314 | Sub Filter_NoMatch ()„Определете масивDim strNames As VariantstrNames = Array („Стив Смит“, „Шанън Смит“, „Райън Джонсън“)„Филтриращ масивЗатъмнете strSubNames като вариантstrSubNames = Филтър (strNames, "Smith", False)„Брой филтрирани масивиMsgBox "Намерено" & UBound (strSubNames) - LBound (strSubNames) + 1 & "имена."End Sub |
Функция на филтъра
Функцията VBA Filter връща подмножество Array на предоставен низов масив.
Синтаксисът на функцията за филтриране е:
Филтър (SourceArray, Match, [Include], [Compare])
Аргументите на функцията са:
- SourceArray - Оригиналният масив за филтриране
- Съвпада - Низът за търсене
- [Включване] - ОПЦИЯ TRUE (Връща съвпадения), FALSE (Връща елементи, които не съвпадат)
- [Сравнете] - ОПЦИЯ vbBinaryCompare - двоично сравнение, vbTextCompare - текстово сравнение, vbDatabaseCompare - сравнение на база данни