The VBA filtri funktsioon võimaldab massiive kiiresti filtreerida. Massiivide filtreerimisel tuleb arvestada mitmete sätetega. Me arutame neid allpool.
Filter - vaste
Vaikimisi filtreerib VBA filtri funktsioon vaste massiivi. Allolevas näites filtreerime massiivi vasteks „Smithiga”.
1234567891011121314 | Alamfiltri_vaste ()'Defineeri massiivDim strNames VariantstrNames = Massiiv ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter MassiivDim strSubNames VariantstrSubNames = Filter (strNames, "Smith")'Krahv filtreeritud massiivMsgBox "Leitud" & UBound (strSubNames) - LBound (strSubNames) + 1 & "nimed".End Sub |
Paar olulist punkti:
- Filtreeritud massiivi muutuja tuleks deklareerida andmetüübi variandina, et vältida massiivi suuruse määratlemist.
- Funktsioon Filter on vaikimisi tõstutundlik. Nii et filtreerimine "sepist" annaks teistsuguse tulemuse kui "Smith". Allpool näitame teile, kuidas seda seadet muuta.
Filter - tõstutundlik
Vaikimisi on VBA tõstutundlik. See tähendab, et “sepp” ei võrdu “Smithiga”. See kehtib filtri funktsiooni ja kõigi (enamiku?) Muude VBA funktsioonide või võrdluste kohta.
Isiklikult ei taha ma kunagi, et VBA oleks tõstutundlik, seega lisan alati suvandi Võrdle teksti kõigi oma koodimoodulite ülaossa. Valik Võrdle teksti käsib VBA -l ignoreerida väiketähti, nii et see ei ole tõstutundlik:
1 | Valik Võrdle teksti |
Kui lisate mooduli ülaossa suvandi Võrdle teksti, muudab filtri funktsiooni tähestiku tundmatuks. Teise võimalusena võite öelda, et filtri funktsioon ise ei ole tõstutundlik, kasutades argumenti vbTextCompare:
1 | strSubNames = Filter (strNames, "sepp",, vbTextCompare) |
Täielik näide:
1234567891011121314 | Alamfilter_MatchCase ()'Defineeri massiivDim strNames VariantstrNames = Massiiv ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter MassiivDim strSubNames VariantstrSubNames = Filter (strNames, "sepp",, vbTextCompare)'Krahv filtreeritud massiivMsgBox "Leitud" & UBound (strSubNames) - LBound (strSubNames) + 1 & "nimed".End Sub |
Filter - ei sobi
Filtri funktsiooni saab kasutada ka massiivielementide tuvastamiseks ÄRA vastama sisestatud kriteeriumidele, seades argumendi Kaasa väärtuseks VÄÄR:
1 | strSubNames = Filter (strNames, "Smith", vale) |
Täielik näide:
1234567891011121314 | Alamfilter_NoMatch ()'Defineeri massiivDim strNames VariantstrNames = Massiiv ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter MassiivDim strSubNames VariantstrSubNames = Filter (strNames, "Smith", vale)'Krahv filtreeritud massiivMsgBox "Leitud" & UBound (strSubNames) - LBound (strSubNames) + 1 & "nimed".End Sub |
Filtri funktsioon
Funktsioon VBA Filter tagastab kaasasoleva stringimassiivi massiivi alamhulga.
Filtri funktsiooni süntaks on järgmine:
Filter (SourceArray, Match, [Kaasa], [Võrdle])
Funktsiooni argumendid on järgmised:
- SourceArray - Algne massiiv filtreerimiseks
- Match - Otsitav string
- [Kaasa] - VALIKULINE TRUE (tagastab vasted), FALSE (tagastab elemendid, mis ei ühti)
- [Võrdlema] - VALIKULINE vbBinaryCompare - binaarne võrdlus, vbTextCompare - tekstide võrdlus, vbDatabaseCompare - andmebaaside võrdlus