Najít text v řetězci (funkce INSTR) - Příklady kódu VBA

Funkce INSTR

Funkce VBA Instr kontroluje, zda se v jiném řetězci textu nachází řetězec textu. Pokud text není nalezen, vrátí hodnotu 0. Jinak vrátí pozici znaku, kde je text nalezen.

Funkce Instr funguje přesný zápasy. Místo toho lze použít VBA Like Operator k provádění nepřesných shod / porovnávání vzorů pomocí zástupných znaků.

Instr Příklad

Následující úryvek kódu hledá v řetězci „Podívejte se do tohoto řetězce“ na slovo „Podívejte se“. Funkce Instr vrací 1, protože text se nachází na první pozici.

123 Sub FindSomeText ()MsgBox InStr („Podívejte se do tohoto řetězce“, „Podívejte se“)End Sub

Tento druhý příklad vrací 7, protože text se nachází od 7. pozice:

123 Sub FindSomeText2 ()MsgBox InStr („Nedívejte se do tohoto řetězce“, „Podívejte se“)End Sub

Důležité! Funkce Instr je citlivý na velká písmena ve výchozím stavu. To znamená, že „vzhled“ se nebude shodovat s „Look“. Aby test nerozlišoval malá a velká písmena, přečtěte si níže.

Instr Syntaxe

Syntaxe funkce Instr je následující:

1 Instr ([start], řetězec, podřetězec, [porovnat])

[start] (volitelně) - Tento nepovinný argument je počáteční pozicí vyhledávání. Zadejte 1 a spusťte vyhledávání z pozice 1 (nebo nechte pole prázdné). Zadejte 5 a spusťte vyhledávání z pozice 5. Důležité! Funkce INSTR vypočítá pozici znaku počítáním od 1 NE z polohy [start].

tětiva - Řetězec textu, ve kterém se má hledat.

podřetězec - Řetězec textu k nalezení v primárním řetězci.

[porovnat] (volitelně) - Ve výchozím nastavení rozlišuje Instr velká a malá písmena. Nastavením tohoto argumentu můžete učinit Instr Case necitlivým:

Hodnota vb argumentu

Celé číslo argumentu Popis
vbBinaryCompare

0

(Výchozí) Rozlišuje velká a malá písmena

vbTextCompare

1

Nerozlišuje velká a malá písmena

vbDatabaseCompare

2

Pouze MS Access. K porovnávání používá informace v databázi.

Instr Počáteční pozice

Počáteční pozice Instr vám umožňuje určit pozici znaku, kde budete hledat. Mějte však na paměti, že výstup Instr bude vždy počítat od 1.

Zde nastavíme počáteční pozici na 3, abychom přeskočili první B:

123 Sub Instr_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")End Sub

Výsledkem je 6, protože druhé B je 6. znak v řetězci.

Test INSTR, který nerozlišuje malá a velká písmena

Ve výchozím nastavení VBA zachází s „L“ odlišně od „l“. Jinými slovy, VBA rozlišuje velká a malá písmena. To platí pro všechny textové funkce. Aby VBA nerozlišovala velká a malá písmena, nastavte argument [porovnat] na 1 nebo vbTextCompare.

123 Public Sub FindText_IgnoreCase ()MsgBox InStr (1, „Nedívejte se do tohoto řetězce“, „podívejte se“, vbTextCompare)End Sub

Alternativně můžete přidat text pro porovnání možností do horní části modulu kódu:

1 Možnost Porovnat text
12345 Možnost Porovnat textPublic Sub FindText_IgnoreCase2 ()MsgBox InStr („Nedívejte se do tohoto řetězce“, „podívejte se“)End Sub

Možnost Porovnat text ovlivní veškerý kód v tomto modulu. Osobně to umisťuji na začátek každého modulu, který se zabývá textem, protože mě nikdy nezajímají rozdíly mezi případy.

Funkce InstrRev

Funkce Instr hledá zleva. Místo toho můžete hledat zprava pomocí funkce InstrRev. Funkce InstrRev funguje velmi podobně jako funkce Instr.

123 Sub FindSomeText_FromRight ()MsgBox InStrRev („Podívejte se do tohoto řetězce“, „Podívejte se“)End Sub

Stejně jako funkce Instr vrátí 1, protože v textu je pouze jedna instance „Look“. Pokud ale přidáme druhé „Look“, uvidíte, že vrací pozici „Right“ nejvíce „Look“:

123 Sub FindSomeText_FromRight ()MsgBox InStrRev („Podívejte se do tohoto řetězce Look“, „Look“)End Sub

Dále zkontrolujeme další příklady Instr.

Příklady InString

Pokud řetězec obsahuje podřetězec

Zde použijeme příkaz If k otestování, zda řetězec obsahuje podřetězec textu:

123456789 Public Sub FindSomeText ()Pokud InStr („Podívejte se do tohoto řetězce“, „podívejte se“) = 0 PakMsgBox „Žádná shoda“JinýMsgBox „Minimálně jedna shoda“Konec IfEnd Sub

Najít textový řetězec v buňce

V buňce můžete také najít řetězec:

12345 Sub Find_String_Cell ()Pokud InStr (rozsah („B2“). Hodnota, „Dr.“)> 0 PakRozsah („C2“). Hodnota = „Doktor“Konec IfEnd Sub

Nebo smyčkou přes rozsah buněk otestujte, zda buňky obsahují nějaký text:

12345678910 Sub Search_Range_For_Text ()Dim buňka jako rozsahPro každou buňku v dosahu („b2: b6“)Pokud InStr (cell.Value, "Dr.")> 0 Pakbuňka.Offset (0, 1) .Hodnota = "Doktor"Konec IfDalší buňkaEnd Sub

Najděte pozici postavy v řetězci

Tento kód najde pozici jednoho znaku v řetězci a přiřadí pozici proměnné:

1234 Sub Find_Char ()Dim n As Longn = InStr („Tady se podívejte sem“, „L“)End Sub

Vyhledávací řetězec pro Word

Tento kód vyhledá slovo v řetězci:

12345678910 Sub Search_String_For_Word ()Dim n As Longn = InStr („Tady se podívejte sem“, „Podívejte“)Pokud n = 0 PakMsgBox "Slovo nenalezeno"JinýMsgBox "Slovo nalezeno na pozici:" & nKonec IfEnd Sub

Pokud proměnná obsahuje řetězec

Tento kód otestuje, zda řetězcová proměnná obsahuje textový řetězec:

12345678 Dílčí proměnná_obsahuje_String ()Dim str jako řetězecstr = "Podívejte se sem"Pokud InStr (str, „Tady“)> 0 PakMsgBox "Zde nalezeno!"Konec IfEnd Sub

Funkce Instr a Left

Instr lze použít společně s dalšími textovými funkcemi, jako je Left, Right, Len a Mid, k oříznutí textu.

Pomocí funkce Vlevo můžete odeslat text před řetězec textu:

1234567891011 Sub Instr_Left ()Dim str jako řetězecDim n As Longstr = "Podívejte se sem"n = InStr (str, "Tady")MsgBox vlevo (str, n - 1)End Sub

Použití Instr v aplikaci Microsoft Access VBA

Všechny výše uvedené příklady fungují v Access VBA úplně stejně jako v Excelu VBA.

Chcete -li se dozvědět více, přečtěte si náš článek: Textové funkce VBA

wave wave wave wave wave