VBA-filterarrays

De VBA-filterfunctie stelt u in staat om snel arrays te filteren. Er zijn verschillende instellingen waarmee u rekening moet houden bij het filteren van arrays. We zullen ze hieronder bespreken.

Filter - Match

Standaard filtert de VBA-filterfunctie een array op overeenkomsten. In het onderstaande voorbeeld zullen we de array filteren op overeenkomsten met "Smith".

1234567891011121314 Subfilter_Match()'Definieer matrix'Dim strNamen als variantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filterarray'Dim strSubNamen als variantstrSubNames = Filter(strNames, "Smith")'Gefilterde array tellen'MsgBox "Gevonden " & UBound(strSubNames) - LBound(strSubNames) + 1 & " names."Einde sub

Een paar belangrijke punten:

  • De gefilterde arrayvariabele moet worden gedeclareerd als variant van het gegevenstype om te voorkomen dat de arraygrootte wordt gedefinieerd.
  • Standaard is de filterfunctie hoofdlettergevoelig. Dus filteren op "smith" zou een ander resultaat geven dan "Smith". Hieronder laten we u zien hoe u deze instelling kunt wijzigen.

Filter - niet hoofdlettergevoelig

VBA is standaard hoofdlettergevoelig. Dit betekent dat "smid" niet gelijk is aan "Smith". Dit geldt voor de filterfunctie, evenals voor alle (de meeste?) andere VBA-functies of vergelijkingen.

Persoonlijk wil ik nooit dat VBA hoofdlettergevoelig is, dus ik voeg altijd Option Compare Text toe aan de bovenkant van al mijn codemodules. Optie Vergelijk tekst vertelt VBA om hoofdletters te negeren, zodat het niet hoofdlettergevoelig is:

1 Optie Tekst vergelijken

Als u de optie Tekst vergelijken aan de bovenkant van uw module toevoegt, wordt de filterfunctie hoofdletterongevoelig. Als alternatief kunt u de filterfunctie zelf vertellen dat deze niet hoofdlettergevoelig is met het argument vbTextCompare:

1 strSubNames = Filter(strNames, "smid", , vbTextCompare)

Volledig voorbeeld:

1234567891011121314 Subfilter_MatchCase()'Definieer matrix'Dim strNamen als variantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filterarray'Dim strSubNamen als variantstrSubNames = Filter(strNames, "smid", , vbTextCompare)'Gefilterde array tellen'MsgBox "Gevonden " & UBound(strSubNames) - LBound(strSubNames) + 1 & " names."Einde sub

Filter - Komt niet overeen

De filterfunctie kan ook worden gebruikt om array-items te identificeren die: NIET DOEN overeenkomen met de ingevoerde criteria door het argument Opnemen in te stellen op ONWAAR:

1 strSubNames = Filter(strNames, "Smith", False)

Volledig voorbeeld:

1234567891011121314 Subfilter_NoMatch()'Definieer matrix'Dim strNamen als variantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filterarray'Dim strSubNamen als variantstrSubNames = Filter(strNames, "Smith", False)'Gefilterde array tellen'MsgBox "Gevonden " & UBound(strSubNames) - LBound(strSubNames) + 1 & " names."Einde sub

Filterfunctie

De VBA-filterfunctie retourneert een array-subset van een geleverde tekenreeksarray.

De syntaxis van de filterfunctie is:

Filter( SourceArray, Match, [Include], [Compare] )

De functieargumenten zijn:

  • SourceArray - De originele array om te filteren
  • Bij elkaar passen - De string om naar te zoeken
  • [Erbij betrekken] - OPTIONEEL TRUE (retourneert overeenkomsten), FALSE (retourneert elementen die niet overeenkomen)
  • [Vergelijken] - OPTIONEEL vbBinaryCompare - binaire vergelijking, vbTextCompare - tekstvergelijking, vbDatabaseCompare - databasevergelijking

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave