VBA -filterarrayer

De VBA -filterfunktion låter dig snabbt filtrera matriser. Det finns flera inställningar att tänka på när du filtrerar matriser. Vi kommer att diskutera dem nedan.

Filter - Matcha

Som standard filtrerar VBA -filterfunktionen en matris för matchningar. I exemplet nedan filtrerar vi matrisen för matchningar med "Smith".

1234567891011121314 Sub Filter_Match ()'Definiera ArrayDim strNames Som variantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames som variantstrSubNames = Filter (strNames, "Smith")'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."Avsluta Sub

Ett par viktiga punkter:

  • Den filtrerade matrisvariabeln bör deklareras som datatypsvariant för att undvika att definiera matrisstorleken.
  • Som standard är filterfunktionen skiftlägeskänslig. Så filtrering på "smith" skulle ge ett annat resultat än "Smith". Nedan visar vi hur du ändrar den här inställningen.

Filter - Känslig för fodral

Som standard är VBA skiftlägeskänsligt. Detta betyder att "smed" inte är lika med "Smith". Detta gäller filterfunktionen, liksom alla (de flesta?) Andra VBA -funktioner eller jämförelser.

Personligen vill jag aldrig att VBA ska vara skiftlägeskänsligt, så jag lägger alltid till Option Compare Text högst upp i alla mina kodmoduler. Alternativ Jämför text berättar för VBA att ignorera fall så att det inte är skiftlägeskänsligt:

1 Alternativ Jämför text

Om du lägger till alternativ Jämför text högst upp i din modul blir filterfunktionen oskadlig. Alternativt kan du säga att själva filterfunktionen inte är skiftlägeskänslig för vbTextCompare -argumentet:

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

Fullständigt exempel:

1234567891011121314 Sub Filter_MatchCase ()'Definiera ArrayDim strNames Som variantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames som variantstrSubNames = Filter (strNames, "smith",, vbTextCompare)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."Avsluta Sub

Filter - matchar inte

Filterfunktionen kan också användas för att identifiera matrisobjekt som LÅT BLI matcha de angivna kriterierna genom att ställa in Inkludera -argumentet till FALSKT:

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

Fullständigt exempel:

1234567891011121314 Sub Filter_NoMatch ()'Definiera ArrayDim strNames Som variantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames som variantstrSubNames = Filter (strNames, "Smith", False)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."Avsluta Sub

Filterfunktion

VBA -filterfunktionen returnerar en Array -delmängd av en medföljande strängmatris.

Filterfunktionssyntaxen är:

Filter (SourceArray, Match, [Inkludera], [Jämför])

Funktionsargumenten är:

  • SourceArray - Den ursprungliga matrisen att filtrera
  • Match - Strängen att söka efter
  • [Omfatta] - FRIVILLIG TRUE (Returnerar matchningar), FALSE (Returnerar element som inte matchar)
  • [Jämföra] - FRIVILLIG vbBinaryCompare - binär jämförelse, vbTextCompare - textjämförelse, vbDatabaseCompare - databasjämförelse

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave