VBA Keresse (Keresse) értéket a tömbben

Ez az oktatóanyag bemutatja, hogyan kell keresni (megtalálni) értéket egy tömbben a VBA -ban

Számos módon kereshet karakterláncot egy tömbben - attól függően, hogy a tömb egydimenziós vagy többdimenziós.

Keresés egydimenziós tömbben

Ha egy egydimenziós tömbben szeretne értéket keresni, használja a Szűrő funkciót.

123 Dim z Mint változat'szűrje az eredeti tömbötz = szűrő (tömb, karakterlánc, igaz, vbCompareBinary)

A szűrő szintaxisa a következő

Szűrés (Forrás tömb, Egyezés karakterláncként, [Belefoglalás logikai értékként], [Összehasonlítás mint vbCompareMethod])

Az Forrás tömb és a Egyezés karakterláncként szükségesek, míg a Felvétel logikai értékként és a Összehasonlítás vbCompareMethod módszerrel opcionálisak. Ha ezeket nem tartalmazza, akkor a következőre van állítva Igaz és vbCompareBinary illetőleg.

Keresse meg a szűrőnek megfelelő értékeket

1234567891011121314 Sub FindBob ()'Hozzon létre tömbötDim strName () VáltozatkéntstrName () = tömb ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklaráljon egy változatot a szűrőadatok tárolásáraDim strSubNames Variant'szűrje az eredeti tömbötstrSubNames = Szűrő (strName, "Bob")'Ha az LBound értéke nagyobb, mint -1, akkor az érték megtalálhatóHa LBound (strSubNames)> -1 Akkor MsgBox ("Megtaláltam Bobot")End Sub

A második tömb tartalmazza a szűrő által talált értékeket. Ha az LBound és az UBound értéke nem -1, akkor a tömbnek sikerült megtalálnia a keresett értéket.

Azt is láthatja, hogy a szöveg hányszor jelenik meg az eredeti tömbben.

1234567891011121314 Sub CountNames ()'Hozzon létre tömbötDim strName () VáltozatkéntstrName () = tömb ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklaráljon egy tömböt a szűrőadatok tárolásáraDim strSubNames Variant'szűrje az eredeti tömbötstrSubNames = Szűrő (strName, "Bob")'Ha mínusz az LBound az UBound értékekből, és hozzáad 1 -et, akkor megkapjuk a szöveg megjelenésének számátMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "név található."End Sub

Keressen olyan értékeket, amelyek NEM felelnek meg a szűrőnek

Az [Belefoglalás logikai értékként] opció lehetővé teszi, hogy megtalálja a tömb hány értékét NE egyezik a szűrővel

1234567891011121314 Sub CountExtraNames ()'hozzon létre tömbötDim strName () VáltozatkéntstrName () = tömb ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklaráljon egy tömböt a szűrőadatok tárolásáraDim strSubNames Variant'szűrje az eredeti tömbötstrSubNames = Szűrő (strName, "Bob", False)'Ha mínusz az LBound az UBound értékekből, és hozzáad 1 -et, akkor megkapjuk a szöveg megjelenésének számátMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "név található."End Sub

ezért módosítottuk ezt a sort:

1 strSubNames = Szűrő (strName, "Bob")

ezzel a sorral:

1 strSubNames = Szűrő (strName, "Bob", False)

Ha ezt a sort használja a kódban, akkor visszaadja az összes nevet, amely NEM felel meg a „Bob” -nak.

Kis- és nagybetű -érzékeny szűrők

Megállapítja, hogy a szűrő alapértelmezés szerint megkülönbözteti a kis- és nagybetűket. Ez minden VBA funkcióra igaz. Ha olyan szöveget szeretne keresni, amely nem különbözteti meg a kis- és nagybetűket, akkor kissé módosítania kell a kódot.

1 z = Szűrő (strName, "bob" ,, vbTextCompare)

Hozzáadás vbTextCompare a szűrősorhoz lehetővé teszi, hogy a kód megtalálja a „bob” vagy „Bob” szót. Ha ezt kihagyja, a VBA alapértelmezés szerint használja vbBinaryCompare amely csak olyan adatokat keres, amelyek an PONTOS mérkőzés. Figyeljük meg a fenti példában, kihagytuk a [Belefoglalás logikai értékként] érvelés így igaz feltételezhető.

Opció Szöveg összehasonlítása

Alternatív megoldásként hozzáadhatja a szöveget Opció Szöveg összehasonlítása a modul tetejére - ezáltal az adott modulban írt összes funkció érzéketlenné válik.

Loop használata tömbön keresztüli kereséshez

A ciklus használata egy kicsit bonyolultabb, mint a Szűrő funkció használata. Létrehozhatunk egy függvényt, amely a tömb összes értékét bekapcsolja.

1234567891011121314151617 Sub LoopThroughArray ()'hozzon létre tömbötDim strName () VáltozatkéntstrName () = tömb ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")Dim strFind karakterlánckéntstrFind = "Bob"Dim i As Long'ciklus a tömbönFor i = LBound (strName, 1) to UBound (strName, 1)Ha InStr (strName (i), strFind)> 0 AkkorMsgBox "Bob megtalálta!"KilépésVége HaKövetkező iEnd Sub

Ahhoz, hogy megtaláljuk a szöveges karakterlánc egy részét, azaz „Bob” a „Bob Smith” vagy „Bob Williams” helyett, az If utasításban az Instr függvényt kellett használnunk. Ez a tömbből a hurok által visszaadott karakterláncban nézte meg, hogy a „Bob” szerepel -e a karakterláncban, és ahogy a karakterláncban is, egy üzenetdobozt ad vissza, majd kilép a hurokból.

Keresés többdimenziós tömbben

A ciklus segítségével többdimenziós tömböt is kereshetünk. Ismét létre kell hoznunk egy függvényt, amely lehetővé teszi számunkra, hogy a tömb összes értékét végigcsináljuk, de ezúttal a tömb minden dimenzióját is át kell tekintenünk.

123456789101112131415161718192021222324252627 Funkció LoopThroughArray ()Dim varArray () mint változatDim strFind mint karakterláncstrFind = "Doktor"'deklarálja a tömb méretétReDim varArray (1, 2)'inicializálja a tömbötvarArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred Buckle"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Könyvelő"varArray (1, 1) = "Titkár"varArray (1, 2) = "Doktor"'deklarálja a ciklus változóitDim i As Long, j A Long'hurok az első dimenzióhozFor i = LBound (varArray, 1) to UBound (varArray, 1)'hurok a második dimenzióhozFor j = LBound (varArray, 2) to UBound (varArray, 2)'Ha megtaláljuk az értéket, akkor az msgbox azt mondja, hogy megvan az érték, és kilép a függvénybőlHa varArray (i, j) = strFind ThenMsgBox "Az orvost megtalálták!"Kilépés funkcióVége HaKövetkező jKövetkező iVége funkció

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave