VBA hľadá (hľadá) hodnotu v poli

Tento tutoriál ukáže, ako vo VBA hľadať (nájsť) hodnotu v poli

Existuje niekoľko spôsobov, ako môžete vyhľadať reťazec v poli - v závislosti od toho, či je pole jednorozmerné alebo viacrozmerné.

Hľadanie v jednorozmernom poli

Na vyhľadanie hodnoty v jednorozmernom poli môžete použiť funkciu filtra.

123 Dim z As Variant'filtrovať pôvodné polez = Filter (pole, reťazec, True, vbCompareBinary)

Nasleduje možnosť Syntax filtra

Filter (pole zdroja, zhoda ako reťazec, [zahrnúť ako booleovskú hodnotu], [porovnať ako vbCompareMethod])

The Zdrojové pole a Zápas ako reťazec sú povinné, zatiaľ čo Zahrnúť ako booleovskú hodnotu a Porovnať ako vbCompareMethod sú voliteľné. Ak nie sú zahrnuté, sú nastavené na Pravda a vbCompareBinary resp.

Nájdite hodnoty, ktoré zodpovedajú filtru

1234567891011121314 Sub FindBob ()„Vytvorte poleDim strName () ako variantstrName () = Pole („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)'deklarovať variant na uloženie údajov filtraDim strSubNames ako variant'filtrovať pôvodné polestrSubNames = Filter (strName, "Bob")„Ak je vaša hodnota LBound väčšia ako -1, hodnota sa našlaAk je LBound (strSubNames)> -1, potom MsgBox („Našiel som Boba“)Koniec pod

Druhé pole bude uchovávať hodnoty nájdené filtrom. Ak vaše hodnoty LBound a UBound nie sú -1, potom sa poli podarilo nájsť hodnotu, ktorú ste hľadali.

Môžete tiež vidieť, koľkokrát sa text zobrazí v pôvodnom poli.

1234567891011121314 Sub CountNames ()„Vytvorte poleDim strName () ako variantstrName () = Pole („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)'deklarujte pole na uloženie údajov filtraDim strSubNames ako variant'filtrovať pôvodné polestrSubNames = Filter (strName, "Bob")„Ak mínus LBound z hodnôt UBound pridáte 1, dostaneme počet zobrazení textu.Msgbox UBound (strSubNames) - LBound (strSubNames) + 1 a „nájdené mená“.Koniec pod

Nájdite hodnoty, ktoré sa NEDORÚČIA filtru

The [Zahrnúť ako booleovskú hodnotu] voľba vám umožní zistiť, koľko hodnôt vo vašom poli je NEROBTE zodpovedať vášmu filtru

1234567891011121314 Sub CountExtraNames ()'vytvoriť poleDim strName () ako variantstrName () = Pole („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)'deklarujte pole na uloženie údajov filtraDim strSubNames ako variant'filtrovať pôvodné polestrSubNames = Filter (strName, "Bob", False)„Ak mínus LBound z hodnôt UBound pridáte 1, dostaneme počet zobrazení textu.Msgbox UBound (strSubNames) - LBound (strSubNames) + 1 a „nájdené mená“.Koniec pod

preto sme zmenili tento riadok:

1 strSubNames = Filter (strName, "Bob")

s týmto riadkom:

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

Použitím tohto riadku v kóde sa vrátia všetky mená, ktoré NIE JE v zhode s „Bob“.

Filtre citlivé na veľkosť písmen

Zistíte, že filter štandardne rozlišuje veľké a malé písmena. To platí pre všetky funkcie VBA. Ak chcete vyhľadávať text, ktorý nerozlišuje veľké a malé písmena, musíte kód mierne upraviť.

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

Pridáva sa vbTextCompare do riadka filtra umožní kódu nájsť „bob“ alebo „Bob“. Ak je to vynechané, VBA štandardne používa vbBinaryCompare ktorý bude hľadať iba údaje, ktoré sú PRESNE zápas. Všimnite si vo vyššie uvedenom príklade, že sme vynechali [Zahrnúť ako booleovskú hodnotu] Argument so True sa predpokladá.

Možnosť Porovnať text

Prípadne môžete pridať text Možnosť Porovnať text na začiatok modulu - všetky funkcie, ktoré do konkrétneho modulu napíšete, budú citlivé na veľké písmená.

Použitie slučky na vyhľadávanie v poli

Použitie slučky je o niečo komplikovanejšie ako používanie funkcie Filter. Môžeme vytvoriť funkciu, ktorá bude prechádzať všetkými hodnotami v poli.

1234567891011121314151617 Sub LoopThroughArray ()'vytvoriť poleDim strName () ako variantstrName () = Pole („Bob Smith“, „John Davies“, „Fred Jones“, „Steve Jenkins“, „Bob Williams“)Dim strFind ako reťazecstrFind = "Bob"Dim i As Long'cez polePre i = LBound (strName, 1) Do UBound (strName, 1)Ak je InStr (strName (i), strFind)> 0 PotomMsgBox „Bob bol nájdený!“Ukončiť preKoniec AkĎalej iKoniec pod

Aby sme našli časť textového reťazca, napr. „Bob“ namiesto „Bob Smith“ alebo „Bob Williams“, museli sme vo vyhlásení If použiť funkciu Instr. Toto vyzeralo v reťazci vrátenom slučkou z poľa, aby sa zistilo, či je v reťazci „Bob“, a ako to bolo v reťazci, vrátilo by sa pole so správou a potom Opustiť slučku.

Hľadanie vo viacrozmernom poli

Smyčku používame aj na vyhľadávanie vo viacrozmernom poli. Opäť musíme vytvoriť funkciu, ktorá nám umožní opakovať všetky hodnoty v poli, ale tentoraz musíme tiež prejsť všetkými dimenziami poľa.

123456789101112131415161718192021222324252627 Funkcia LoopThroughArray ()Dim varArray () ako variantDim strFind As StringstrFind = "Doktor"'deklarujte veľkosť poľaReDim varArray (1, 2)'inicializujte polevarArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred Buckle"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Účtovník"varArray (1, 1) = "tajomník"varArray (1, 2) = "Doktor"'deklarujte premenné pre slučkuDim i As Long, j As Long„slučka pre prvú dimenziuPre i = LBound (varArray, 1) až UBound (varArray, 1)„slučka pre druhú dimenziuPre j = LBound (varArray, 2) až UBound (varArray, 2)„Ak nájdeme hodnotu, potom msgbox povie, že hodnotu máme, a ukončíme funkciuAk varArray (i, j) = strFind ThenMsgBox „Doktor bol nájdený!“Ukončiť funkciuKoniec AkĎalej jĎalej iKoncová funkcia
wave wave wave wave wave