Die VBA-Filterfunktion ermöglicht Ihnen das schnelle Filtern von Arrays. Beim Filtern von Arrays sind mehrere Einstellungen zu berücksichtigen. Wir werden sie im Folgenden besprechen.
Filter - Match
Standardmäßig filtert die VBA-Filterfunktion ein Array nach Übereinstimmungen. Im folgenden Beispiel werden wir das Array nach Übereinstimmungen mit „Smith“ filtern.
1234567891011121314 | Unterfilter_Match()'Array definierenDim strNames als VariantestrNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter-ArrayDim strSubNames als VariantestrSubNames = Filter(strNames, "Smith")'Gefiltertes Array zählenMsgBox "Gefunden" & UBound(strSubNames) - LBound(strSubNames) + 1 & " Namen."End Sub |
Ein paar wichtige Punkte:
- Die gefilterte Array-Variable sollte als Datentyp-Variante deklariert werden, um die Definition der Array-Größe zu vermeiden.
- Standardmäßig berücksichtigt die Filterfunktion die Groß-/Kleinschreibung. Eine Filterung nach „smith“ würde also ein anderes Ergebnis liefern als „Smith“. Im Folgenden zeigen wir Ihnen, wie Sie diese Einstellung ändern können.
Filter - Groß-/Kleinschreibung nicht beachten
Standardmäßig ist bei VBA die Groß-/Kleinschreibung beachtet. Das bedeutet, dass „Smith“ nicht gleich „Smith“ ist. Dies gilt für die Filterfunktion sowie für alle (die meisten?) anderen VBA-Funktionen oder -Vergleiche.
Persönlich möchte ich nie, dass VBA die Groß-/Kleinschreibung beachtet, daher füge ich immer die Option Text vergleichen oben in allen meinen Codemodulen hinzu. Die Option Text vergleichen weist VBA an, die Groß-/Kleinschreibung zu ignorieren, sodass die Groß-/Kleinschreibung nicht beachtet wird:
1 | Option Text vergleichen |
Wenn Sie die Option Text vergleichen oben in Ihrem Modul hinzufügen, wird die Groß-/Kleinschreibung der Filterfunktion nicht berücksichtigt. Alternativ können Sie die Filterfunktion selbst mit dem Argument vbTextCompare so einstellen, dass die Groß-/Kleinschreibung nicht beachtet wird:
1 | strSubNames = Filter(strNames, "smith", , vbTextCompare) |
Vollständiges Beispiel:
1234567891011121314 | Unterfilter_MatchCase()'Array definierenDim strNames als VariantestrNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter-ArrayDim strSubNames als VariantestrSubNames = Filter(strNames, "smith", , vbTextCompare)'Gefiltertes Array zählenMsgBox "Gefunden" & UBound(strSubNames) - LBound(strSubNames) + 1 & " Namen."End Sub |
Filter - stimmt nicht überein
Die Filterfunktion kann auch verwendet werden, um Array-Elemente zu identifizieren, die NICHT mit den eingegebenen Kriterien übereinstimmen, indem Sie das Include-Argument auf FALSE setzen:
1 | strSubNames = Filter(strNames, "Smith", False) |
Vollständiges Beispiel:
1234567891011121314 | Unterfilter_NoMatch()'Array definierenDim strNames als VariantestrNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter-ArrayDim strSubNames als VariantestrSubNames = Filter(strNames, "Smith", False)'Gefiltertes Array zählenMsgBox "Gefunden" & UBound(strSubNames) - LBound(strSubNames) + 1 & " Namen."End Sub |
Filterfunktion
Die VBA-Filterfunktion gibt eine Array-Untermenge eines bereitgestellten String-Arrays zurück.
Die Syntax der Filterfunktion lautet:
Filter( SourceArray, Match, [Include], [Compare] )
Die Funktionsargumente sind:
- SourceArray - Das ursprüngliche zu filternde Array
- Spiel - Die Zeichenfolge, nach der gesucht werden soll
- [Enthalten] - OPTIONAL TRUE (Gibt Übereinstimmungen zurück), FALSE (Gibt Elemente zurück, die nicht übereinstimmen)
- [Vergleichen] - OPTIONAL vbBinaryCompare - Binärvergleich, vbTextCompare - Textvergleich, vbDatabaseCompare - Datenbankvergleich