VBA Traži vrijednost (Pronađi) u nizu

Ovaj će vodič pokazati kako tražiti (pronaći) vrijednost u nizu u VBA -i

Postoji niz načina na koje možete tražiti niz u nizu - ovisno o tome je li niz jednodimenzionalan ili višedimenzionalan.

Traženje u jednodimenzionalnom nizu

Za traženje vrijednosti u jednodimenzionalnom nizu možete koristiti funkciju filtra.

123 Dim z Kao varijanta'filtrirajte izvorni nizz = Filter (niz, niz, istina, vbCompareBinary)

Sintaksa opcije Filter je sljedeća

Filter (izvorni niz, podudaranje kao niz, [uključi kao logičko], [usporedi kao vbCompareMethod])

The Izvorni niz i Uskladi kao niz su potrebni dok Uključi kao logičko i Usporedi kao vbCompareMethod su izborni. Ako nisu uključeni, postavljeni su na Pravi i vbCompareBinary odnosno.

Pronađite vrijednosti koje odgovaraju Filtru

1234567891011121314 Sub FindBob ()'Napravi nizDim strName () Kao varijantastrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklarirajte varijantu za spremanje podataka filtraDim strSubNames kao varijanta'filtrirajte izvorni nizstrSubNames = Filter (strName, "Bob")'ako je vaša LBound vrijednost veća od -1, tada je vrijednost pronađenaAko je LBound (strSubNames)> -1 Zatim MsgBox ("Našao sam Boba")Kraj podm

Drugi niz će sadržavati vrijednosti koje filter pronađe. Ako vaše vrijednosti LBound i UBound nisu -1, tada je niz uspio pronaći vrijednost koju ste tražili.

Također možete vidjeti koliko se puta tekst pojavljuje u izvornom nizu.

1234567891011121314 Imena podbroja ()'Stvori nizDim strName () Kao varijantastrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklarirajte niz za pohranu podataka filtraDim strSubNames kao varijanta'filtrirajte izvorni nizstrSubNames = Filter (strName, "Bob")'ako minus vrijednost LBound iz UBound vrijednosti i dodate 1, dobit ćemo broj pojavljivanja tekstaMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "pronađena imena".Kraj podm

Pronađite vrijednosti koje NE odgovaraju filteru

The [Uključi kao logičko] opcija vam omogućuje da pronađete koliko vrijednosti u vašem nizu koje NEMOJ odgovaraju vašem filtru

1234567891011121314 PodbrojExtraNames ()'stvoriti nizDim strName () Kao varijantastrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklarirajte niz za pohranu podataka filtraDim strSubNames kao varijanta'filtrirajte izvorni nizstrSubNames = Filter (strName, "Bob", False)'ako minus vrijednost LBound iz UBound vrijednosti i dodate 1, dobit ćemo broj pojavljivanja tekstaMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "pronađena imena".Kraj podm

stoga smo izmijenili ovaj redak:

1 strSubNames = Filter (strName, "Bob")

ovim retkom:

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

Korištenjem ovog retka u kodu vratili bi se svi nazivi koji NE odgovaraju "Bob".

Filtri osjetljivi na velika i mala slova

Vidjet ćete da je filter prema zadanim postavkama osjetljiv na velika i mala slova. To vrijedi za sve VBA funkcije. Ako želite pretraživati ​​tekst koji ne razlikuje velika i mala slova, morate malo izmijeniti kôd.

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

Dodavanje vbTextCompare na vašu liniju filtra omogućit će vašem kodu da pronađe "bob" ili "Bob". Ako je to izostavljeno, VBA se zadano koristi vbBinaryCompare koji će tražiti samo podatke koji su TOČNO podudarati. Primijetite da smo u gornjem primjeru izostavili [Uključi kao logičko] argument pa se pretpostavlja True.

Opcija Usporedi tekst

Alternativno, možete dodati tekst Opcija Usporedi tekst do vrha vašeg modula - time će sve funkcije koje upisujete u velika i mala slova modula postati neosjetljive.

Korištenje petlje za pretraživanje kroz niz

Korištenje petlje malo je složenije od korištenja funkcije Filter. Možemo stvoriti funkciju koja će se pomicati kroz sve vrijednosti u nizu.

1234567891011121314151617 Sub LoopThroughArray ()'stvoriti nizDim strName () Kao varijantastrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")Zatamni strNađi kao nizstrFind = "Bob"Dim i As Long'petlja kroz nizZa i = LBound (strName, 1) Za UBound (strName, 1)Ako je InStr (strName (i), strFind)> 0 ZatimMsgBox "Bob je pronađen!"Izlaz zaZavrši akoSljedeći iKraj podm

Kako bismo pronašli dio tekstualnog niza, tj. "Bob" umjesto "Bob Smith" ili "Bob Williams", morali smo upotrijebiti funkciju Instr u naredbi If. Ovo je izgledalo u nizu koji je petlja vratila iz niza da vidi je li u nizu "Bob", a kako je bio u nizu, vratio bi okvir s porukom, a zatim izašao iz petlje.

Pretraživanje u višedimenzionalnom nizu

Također koristimo petlju za pretraživanje kroz višedimenzionalni niz. Još jednom moramo stvoriti funkciju koja nam omogućuje da prođemo kroz sve vrijednosti u nizu, ali ovaj put također moramo proći kroz svaku dimenziju niza.

123456789101112131415161718192021222324252627 Funkcija LoopThroughArray ()Dim varArray () Kao varijantaZatamni str Pronađi kao nizstrFind = "Doktor"'deklarirajte veličinu nizaReDim varArray (1, 2)'inicijalizira nizvarArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred kopča"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Računovođa"varArray (1, 1) = "Tajnik"varArray (1, 2) = "Doktor"'deklariraju varijable za petljuDim i As Long, j As Long'petlja za prvu dimenzijuZa i = LBound (varArray, 1) Za UBound (varArray, 1)'petlja za drugu dimenzijuZa j = LBound (varArray, 2) Za UBound (varArray, 2)'ako nađemo vrijednost, onda msgbox reći da imamo vrijednost i izaći iz funkcijeAko je varArray (i, j) = strNađite tadaMsgBox "Liječnik je pronađen!"Izlazna funkcijaZavrši akoSljedeće jSljedeći iZavršna funkcija
wave wave wave wave wave