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