VBA -filteroppstillinger

De VBA -filterfunksjon lar deg raskt filtrere matriser. Det er flere innstillinger du bør vurdere når du filtrerer matriser. Vi vil diskutere dem nedenfor.

Filter - Match

Som standard vil VBA -filterfunksjonen filtrere en matrise for kamper. I eksemplet nedenfor filtrerer vi matrisen for treff med "Smith".

1234567891011121314 Sub Filter_Match ()'Definer matriseDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames As VariantstrSubNames = Filter (strNames, "Smith")'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."Slutt Sub

Et par viktige punkter:

  • Den filtrerte matrisvariabelen bør deklareres som datatypevariant for å unngå å definere matrisestørrelsen.
  • Som standard er filterfunksjonen store og små bokstaver. Så filtrering på "smith" ville gitt et annet resultat enn "Smith". Nedenfor viser vi deg hvordan du endrer denne innstillingen.

Filter - Ufølsom for bokstaver

Som standard er VBA store og små bokstaver. Dette betyr at "smith" ikke er lik "Smith". Dette gjelder filterfunksjonen, så vel som alle (de fleste?) Andre VBA -funksjoner eller sammenligninger.

Personlig vil jeg aldri at VBA skal skille mellom store og små bokstaver, så jeg legger alltid til Option Compare Text til toppen av alle kodemodulene mine. Alternativ Sammenlign tekst forteller VBA å ignorere store og små bokstaver, slik at det ikke er saksfølsomt:

1 Alternativ Sammenlign tekst

Hvis du legger til alternativet Sammenlign tekst til toppen av modulen din, vil filterfunksjonen ikke skille mellom store og små bokstaver. Alternativt kan du fortelle selve filterfunksjonen å være ufølsom for bokstaver med argumentet vbTextCompare:

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

Fullstendig eksempel:

1234567891011121314 Sub Filter_MatchCase ()'Definer matriseDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames As VariantstrSubNames = Filter (strNames, "smith",, vbTextCompare)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."Slutt Sub

Filter - matcher ikke

Filterfunksjonen kan også brukes til å identifisere matriselementer som IKKE samsvarer med de angitte kriteriene ved å sette Inkluder -argumentet til FALSK:

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

Fullstendig eksempel:

1234567891011121314 Sub Filter_NoMatch ()'Definer matriseDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames As VariantstrSubNames = Filter (strNames, "Smith", False)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names."Slutt Sub

Filterfunksjon

VBA Filter -funksjonen returnerer et Array -delsett av en medfølgende strengmatrise.

Filterfunksjonens syntaks er:

Filter (SourceArray, Match, [Inkluder], [Sammenlign])

Funksjonsargumentene er:

  • SourceArray - Den originale matrisen som skal filtreres
  • Kamp - Strengen du skal søke etter
  • [Inkludere] - VALGFRI TRUE (Returnerer treff), FALSE (Returnerer elementer som ikke samsvarer)
  • [Sammenligne] - VALGFRI vbBinaryCompare - binær sammenligning, vbTextCompare - tekst sammenligning, vbDatabaseCompare - database sammenligning

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave