Funkcia INSTR
Funkcia VBA Instr kontroluje, či sa v inom reťazci textu nachádza reťazec textu. Ak text nenájdete, vráti hodnotu 0. V opačnom prípade vráti pozíciu znaku, kde sa nachádza text.
Funkcia Instr funguje presný zápasy. Namiesto toho je možné použiť operátor VBA Like na vykonávanie nepresných zhody / zhody vzorov pomocou zástupných znakov.
Príklad príkladu
Nasledujúci útržok kódu hľadá v slove „Pozrite“ v reťazci „Pozrite sa do tohto reťazca“. Funkcia Instr vráti hodnotu 1, pretože text sa nachádza na prvej pozícii.
123 | Sub FindSomeText ()MsgBox InStr („Pozrite sa do tohto reťazca“, „Pozrite“)Koniec pod |
Tento druhý príklad vracia 7, pretože text sa nachádza od 7. pozície:
123 | Sub FindSomeText2 ()MsgBox InStr („Nepozerať v tomto reťazci“, „Pozrieť“)Koniec pod |
Dôležité! Funkcia Instr je rozlišujú sa malé a veľké písmená predvolene. To znamená, že „vzhľad“ sa nebude zhodovať s „vzhľad“. Aby test nerozlišoval malé a veľké písmená, prečítajte si nižšie.
Syntax inštr
Syntax funkcie Instr je nasledovná:
1 | Instr ([štart], reťazec, podreťazec, [porovnať]) |
[štart] (voliteľné) - Tento voliteľný argument je počiatočnou pozíciou vyhľadávania. Zadajte 1, čím spustíte vyhľadávanie z pozície 1 (alebo nechajte pole prázdne). Zadajte 5, aby ste začali hľadať z pozície 5. Dôležité! Funkcia INSTR počíta polohu znaku počítaním od 1 NIE z polohy [štart].
reťazec - Reťazec textu, v ktorom sa má hľadať.
podreťazec - Reťazec textu, ktorý sa má nájsť v primárnom reťazci.
[porovnať] (voliteľné) - V predvolenom nastavení Instr rozlišuje veľké a malé písmená. Nastavením tohto argumentu môžete spôsobiť, že Instr Case nebude citlivý:
Hodnota argumentu vb | Celé číslo argumentu | Popis |
vbBinaryCompare |
0 | (Predvolené) Rozlišujú sa malé a veľké písmená |
vbTextCompare |
1 | Nerozlišuje malé a veľké písmená |
vbDatabaseCompare |
2 | Len MS prístup. Na porovnanie používa informácie v databáze. |
Začiatočná pozícia
Počiatočná pozícia Instr vám umožňuje určiť pozíciu znaku, na ktorom budete hľadať. Nezabúdajte však, že výstup Instr bude vždy počítať od 1.
Tu nastavíme počiatočnú pozíciu na 3, aby sme preskočili prvú B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, „ABC ABC“, „B“)Koniec pod |
Výsledok je 6, pretože druhé B je 6. znak v reťazci.
Test INSTR, ktorý nerozlišuje malé a veľké písmená
VBA štandardne zaobchádza s „L“ odlišne od „l“. Inými slovami, VBA rozlišuje veľké a malé písmena. To platí pre všetky textové funkcie. Aby VBA nerozlišovala malé a veľké písmena, nastavte argument [porovnať] na 1 alebo vbTextCompare.
123 | Public Sub FindText_IgnoreCase ()MsgBox InStr (1, „Nehľadajte v tomto reťazci“, „hľadajte“, vbTextCompare)Koniec pod |
Prípadne môžete pridať text na porovnanie možností do hornej časti modulu kódu:
1 | Možnosť Porovnať text |
12345 | Možnosť Porovnať textPublic Sub FindText_IgnoreCase2 ()MsgBox InStr („Nepozerajte sa do tohto reťazca“, „hľadajte“)Koniec pod |
Možnosť Porovnať text ovplyvní celý kód v tomto module. Osobne to umiestňujem na začiatok každého modulu, ktorý sa zaoberá textom, pretože ma nikdy nezaujímajú rozdiely medzi prípadmi.
Funkcia InstrRev
Funkcia Instr hľadá zľava. Namiesto toho môžete hľadať sprava pomocou funkcie InstrRev. Funkcia InstrRev funguje veľmi podobne ako funkcia Instr.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev („Pozrite sa do tohto reťazca“, „Pozrite“)Koniec pod |
Rovnako ako funkcia Instr vráti 1, pretože v texte je iba jedna inštancia „Look“. Ak však pridáme druhé „pozretie“, uvidíte, že vráti pozíciu „najvhodnejšieho vzhľadu“:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev („Pozrite sa v tomto reťazci Pozrite sa“, „Pozrite“)Koniec pod |
Ďalej preskúmame ďalšie príklady Instr.
Príklady reťazcov
Ak reťazec obsahuje podreťazec
Tu použijeme príkaz If na testovanie, či reťazec obsahuje podreťazec textu:
123456789 | Public Sub FindSomeText ()Ak InStr („Pozrite sa do tohto reťazca“, „pozrite sa“) = 0 PotomMsgBox „Žiadna zhoda“InakMsgBox „Minimálne jeden zápas“Koniec AkKoniec pod |
Nájdite textový reťazec v bunke
V bunke môžete nájsť aj reťazec:
12345 | Sub Find_String_Cell ()Ak je InStr (rozsah („B2“). Hodnota, „Dr.“)> 0 PotomRozsah („C2“). Hodnota = „Doktor“Koniec AkKoniec pod |
Alebo môžete prejsť rozsahom buniek a otestovať, či bunky obsahujú nejaký text:
12345678910 | Sub Search_Range_For_Text ()Dim bunka ako rozsahPre každú bunku v rozsahu („b2: b6“)Ak je InStr (cell.Value, "Dr.")> 0 Potombunka.Offset (0, 1). Hodnota = "Doktor"Koniec AkĎalšia bunkaKoniec pod |
Nájdite polohu postavy v reťazci
Tento kód nájde pozíciu jedného znaku v reťazci a priradí pozíciu premennej:
1234 | Sub Find_Char ()Dim n As Longn = InStr („Tu sa pozrite sem“, „L“)Koniec pod |
Vyhľadávací reťazec pre Word
Tento kód vyhľadá slovo v reťazci:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr („Tu sa pozrite sem“, „Pozrite“)Ak n = 0 PotomMsgBox „Slovo sa nenašlo“InakMsgBox „Slovo nájdené na pozícii:“ & nKoniec AkKoniec pod |
Ak premenná obsahuje reťazec
Tento kód otestuje, či reťazcová premenná obsahuje reťazec textu:
12345678 | Vedľajšia premenná_obsahuje_reťazec ()Dim str Ako reťazecstr = "Pozrite sa sem"Ak je InStr (str, „Tu“)> 0, potomMsgBox „Tu nájdete!“Koniec AkKoniec pod |
Funkcia Instr a Left
Instr je možné použiť spolu s ďalšími textovými funkciami, ako je ľavý, pravý, lenný a stredný, na orezanie textu.
Pomocou funkcie Vľavo môžete odoslať text pred reťazec textu:
1234567891011 | Sub Instr_Left ()Dim str Ako reťazecDim n As Longstr = "Pozrite sa sem"n = InStr (str, „tu“)MsgBox vľavo (str, n - 1)Koniec pod |
Použitie Instr v programe Microsoft Access VBA
Všetky vyššie uvedené príklady fungujú v programe Access VBA úplne rovnako ako v programe Excel VBA.
Ak sa chcete dozvedieť viac, prečítajte si náš článok: Textové funkcie VBA