VBA Ieškokite (raskite) vertę „Array“

Ši pamoka parodys, kaip ieškoti (rasti) vertės masyve VBA

Masyvo eilutės galima ieškoti įvairiais būdais - priklausomai nuo to, ar masyvas yra vienmatis, ar daugiamatis.

Ieškau vienmatės masyvo

Norėdami ieškoti vertės vieno matmens masyve, galite naudoti filtro funkciją.

123 Dim z Kaip variantas“filtruokite pradinį masyvąz = filtras (masyvas, eilutė, tiesa, vbCompareBinary)

Filtro parinkties sintaksė yra tokia

Filtras (šaltinio masyvas, atitikimas kaip eilutė, [Įtraukti kaip loginis], [Palyginti kaip vbCompareMethod])

The Šaltinio masyvas ir Suderinti kaip eilutę yra būtini, kol Įtraukti kaip loginį ir Palyginkite kaip „vbCompareMethod“ yra neprivalomi. Jei jie neįtraukti, jie yra nustatyti Tiesa ir vbCompareBinary atitinkamai.

Raskite filtrą atitinkančias vertes

1234567891011121314 „FindBob“ ()„Sukurkite masyvąDim strName () Kaip variantasstrName () = masyvas („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)“paskelbti variantą, kuriame būtų saugomi filtro duomenysDim strSubNames As Variant“filtruokite pradinį masyvąstrSubNames = Filtras (strName, "Bobas")'jei LBound reikšmė yra didesnė nei -1, tada vertė buvo rastaJei LBound (strSubNames)> -1 Tada MsgBox („Radau Bobą“)Pabaiga Sub

Antrasis masyvas išsaugos filtro nustatytas vertes. Jei jūsų LBound ir UBound reikšmės nėra -1, masyvui pavyko rasti vertę, kurios ieškojote.

Taip pat galite pamatyti, kiek kartų tekstas rodomas pradiniame masyve.

1234567891011121314 Sub CountNames ()'Sukurkite masyvąDim strName () Kaip variantasstrName () = masyvas („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)“paskelbti masyvą, kuriame būtų saugomi filtro duomenysDim strSubNames As Variant“filtruokite pradinį masyvąstrSubNames = Filtras (strName, "Bobas")„Jei atmetate„ LBound “iš„ UBound “verčių ir pridėsite 1, gausime teksto pasirodymo skaičių„Msgbox UBound“ („strSubNames“) - „LBound“ („strSubNames“) + 1 ir „rasti vardai“.Pabaiga Sub

Raskite vertes, kurios neatitinka filtro

The [Įtraukti kaip loginį] Ši parinktis leidžia jums sužinoti, kiek jūsų masyvo verčių NEREIKIA atitinka jūsų filtrą

1234567891011121314 Sub CountExtraNames ()“sukurti masyvąDim strName () Kaip variantasstrName () = masyvas („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)“paskelbti masyvą, kuriame būtų saugomi filtro duomenysDim strSubNames As Variant“filtruokite pradinį masyvąstrSubNames = Filtras (strName, "Bob", False)„Jei atmetate„ LBound “iš„ UBound “verčių ir pridėsite 1, gausime teksto pasirodymo skaičių„Msgbox UBound“ („strSubNames“) - „LBound“ („strSubNames“) + 1 ir „rasti vardai“.Pabaiga Sub

todėl pakeitėme šią eilutę:

1 strSubNames = Filtras (strName, "Bobas")

su šia eilute:

1 strSubNames = Filtras (strName, "Bob", False)

Naudojant šią kodo eilutę, būtų grąžinti visi vardai, kurie neatitinka „Bob“.

Didžiosios ir mažosios raidės filtrai

Pamatysite, kad filtras pagal numatytuosius nustatymus skiria didžiąsias ir mažąsias raides. Tai pasakytina apie visas VBA funkcijas. Jei norite ieškoti teksto, neskiriančio didžiųjų ir mažųjų raidžių, turite šiek tiek pataisyti kodą.

1 z = filtras (strName, "bob" ,, vbTextCompare)

Pridedant vbTextCompare į filtro eilutę leis jūsų kodui surasti „bob“ arba „bob“. Jei tai praleista, VBA pagal numatytuosius nustatymus naudoja vbBinaryCompare kuri ieškos tik duomenų, kurie yra TIKSLAS rungtynės. Atkreipkite dėmesį į aukščiau pateiktą pavyzdį [Įtraukti kaip loginį] argumentas, todėl manoma, kad tiesa.

Parinktis Lyginti tekstą

Arba galite pridėti tekstą Parinktis Lyginti tekstą iki modulio viršaus - visos funkcijos, kurias rašote konkrečiame modulyje, yra nejautrios.

Ciklo naudojimas paieškai masyve

Naudoti kilpą yra šiek tiek sudėtingiau nei naudoti filtro funkciją. Mes galime sukurti funkciją, kuri perkelia visas masyvo reikšmes.

1234567891011121314151617 Sub LoopThroughArray ()“sukurti masyvąDim strName () Kaip variantasstrName () = masyvas („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)Dim strFind kaip eilutėstrFind = "Bobas"Tamsiai ilgas'kilpa per masyvąJei i = LBound (strName, 1) iki UBound (strName, 1)Jei InStr (strName (i), strFind)> 0 TadaMsgBox "Bobas buvo rastas!"IšeitiPabaiga JeiKitas I.Pabaiga Sub

Norėdami rasti teksto eilutės dalį, ty „Bob“, o ne „Bob Smith“ arba „Bob Williams“, „If“ teiginyje turėjome naudoti funkciją „Instr“. Tai atrodė eilutėje, kurią grąžino kilpa iš masyvo, kad pamatytų, ar eilutėje yra „Bobas“, ir kaip eilutėje, ji grąžins pranešimų laukelį, o tada išeis iš ciklo.

Ieškoma kelių matmenų masyvo

Mes taip pat naudojame kilpą ieškodami kelių matmenų masyvo. Dar kartą turime sukurti funkciją, kuri neleistų mums peržiūrėti visų masyvo verčių, tačiau šį kartą taip pat turime pereiti per kiekvieną masyvo matmenį.

123456789101112131415161718192021222324252627 Funkcija LoopThroughArray ()Dim varArray () kaip variantasDim strFind As StringstrFind = "Gydytojas"“paskelbti masyvo dydį„ReDim varArray“ (1, 2)“inicijuokite masyvąvarArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred Buckle"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Buhalteris"varArray (1, 1) = "Sekretorius"varArray (1, 2) = "Gydytojas"“deklaruoti kilpos kintamuosiusDim i As Long, j Kaip ilgai'pirmojo matmens kilpaI = LBound (varArray, 1) iki UBound (varArray, 1)“antrojo matmens kilpaJ = LBound (varArray, 2) iki UBound (varArray, 2)'jei randame vertę, tada pranešime „msgbox“ sakome, kad turime vertę ir išeiname iš funkcijosJei varArray (i, j) = strFind TadaMsgBox "Gydytojas buvo rastas!"Išėjimo funkcijaPabaiga JeiKitas jKitas I.Pabaigos funkcija
wave wave wave wave wave