The Funkce filtru VBA umožňuje rychle filtrovat pole. Při filtrování polí je třeba vzít v úvahu několik nastavení. Budeme o nich diskutovat níže.
Filtr - shoda
Ve výchozím nastavení bude funkce filtru VBA filtrovat pole pro shody. V níže uvedeném příkladu budeme filtrovat pole pro shody s „Smith“.
1234567891011121314 | Sub Filter_Match ()"Definujte pole."Dim strNames As VariantstrNames = Array („Steve Smith“, „Shannon Smith“, „Ryan Johnson“)„Pole filtrůDim strSubNames jako variantastrSubNames = Filtr (strNames, "Smith")„Hrabě Filtrované poleMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."End Sub |
Několik důležitých bodů:
- Filtrovaná proměnná pole by měla být deklarována jako varianta datového typu, aby nedošlo k definování velikosti pole.
- Ve výchozím nastavení funkce Filtr rozlišuje velká a malá písmena. Filtrování na „kováři“ by tedy poskytlo jiný výsledek než „kovář“. Níže vám ukážeme, jak toto nastavení změnit.
Filtr - nerozlišuje velká a malá písmena
Standardně VBA rozlišuje velká a malá písmena. To znamená, že „kovář“ neznamená „kovář“. To platí pro funkci filtru, stejně jako pro všechny (většina?) Dalších funkcí nebo srovnání VBA.
Osobně nikdy nechci, aby VBA rozlišoval velká a malá písmena, takže vždy na začátek všech svých modulů kódu přidám text pro porovnání možností. Možnost Porovnat text říká VBA, aby ignorovala velká a malá písmena, takže nerozlišuje velká a malá písmena:
1 | Možnost Porovnat text |
Když do horní části modulu přidáte text pro porovnání možností, funkce Filtr nebude rozlišovat velká a malá písmena. Alternativně můžete sdělit funkci filtrování, aby nerozlišovala malá a velká písmena pomocí argumentu vbTextCompare:
1 | strSubNames = Filtr (strNames, "smith",, vbTextCompare) |
Úplný příklad:
1234567891011121314 | Sub Filter_MatchCase ()"Definujte pole."Dim strNames As VariantstrNames = Array („Steve Smith“, „Shannon Smith“, „Ryan Johnson“)„Pole filtrůDim strSubNames jako variantastrSubNames = Filtr (strNames, "smith",, vbTextCompare)„Hrabě Filtrované poleMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."End Sub |
Filtr - neodpovídá
Funkci filtru lze také použít k identifikaci položek pole, které NE odpovídat zadaným kritériím nastavením argumentu Include na FALSE:
1 | strSubNames = Filtr (strNames, "Smith", False) |
Úplný příklad:
1234567891011121314 | Dílčí filtr_NoMatch ()"Definujte pole."Dim strNames As VariantstrNames = Array („Steve Smith“, „Shannon Smith“, „Ryan Johnson“)„Pole filtrůDim strSubNames jako variantastrSubNames = Filtr (strNames, "Smith", False)„Hrabě Filtrované poleMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."End Sub |
Funkce filtru
Funkce filtru VBA vrací podmnožinu pole dodaného pole řetězců.
Syntaxe funkce filtru je:
Filtr (SourceArray, Match, [Include], [Compare])
Argumenty funkce jsou:
- SourceArray - Původní pole k filtrování
- Zápas - Řetězec, který se má vyhledat
- [Zahrnout] - VOLITELNÝ TRUE (vrací shody), FALSE (vrací prvky, které se neshodují)
- [Porovnat] - VOLITELNÝ vbBinaryCompare - binární srovnání, vbTextCompare - porovnání textu, vbDatabaseCompare - porovnání databáze