Obsah
Implementácia VBA je najefektívnejšia, najrýchlejšia a najbezpečnejšia metóda na spustenie akejkoľvek operácie v Exceli. V tomto článku si ukážeme, ako nájsť určité reťazce v inom danom reťazci pomocou VBA v programe Excel.
Stiahnite si šablónu pre prax
Bezplatnú cvičnú šablónu Excel si môžete stiahnuť odtiaľto.
VBA na vyhľadávanie v reťazci String.xlsm
Funkcia InStr
Microsoft Excel má zabudovanú funkciu s názvom funkcia InStr na zistenie pozície konkrétnych reťazcov v danom reťazci.
Všeobecná syntax:
InStr([start], string1, string2, [compare])
Tu,
Argumenty | Povinné/ voliteľné | Definícia |
---|---|---|
spustenie | Voliteľné | Počiatočná pozícia vyhľadávania.
|
reťazec1 | Požadované | Reťazec, v ktorom sa má vyhľadávať, Primárny reťazec. |
reťazec2 | Požadované | Reťazec, ktorý sa má hľadať v primárnom reťazci. |
porovnať | Voliteľné | Stránka InStr je predvolene citlivá na veľkosť písmen. Ak však chcete spustiť funkciu, ktorá nerozlišuje veľkosť písmen InStr , potom tu môžete odovzdať argument na vykonanie určitého porovnania. Tento argument môže mať nasledujúce hodnoty,
V predvolenom nastavení, InStr berie vbBinaryCompare ako argument porovnania. |
8 jednoduchých príkladov na nájdenie konkrétnej pozície reťazca v danom reťazci pomocou VBA
Ukážme si niekoľko jednoduchých príkladov na získanie pozícií určitých reťazcov v danom reťazci pomocou VBA .
1. VBA na zistenie pozície textu v reťazci
Nižšie je uvedený príklad InStr na zistenie pozície textu v reťazci.
- Tlač Alt + F11 na klávesnici alebo prejdite na kartu Vývojár -> Visual Basic otvoriť Editor jazyka Visual Basic .
- Vo vyskakovacom okne kódu kliknite na paneli ponúk na položku Vložiť -> Modul .
- Teraz v okne kódu napíšte jednoduchý InStr program vo vnútri Podprocedúra VBA (pozri nižšie).
Sub INSTR_Example() MsgBox InStr("Šťastie je voľba", "voľba") End Sub
Váš kód je teraz pripravený na spustenie.
- Tlač F5 na klávesnici alebo na paneli ponúk vyberte Run -> Run Sub/UserForm Môžete tiež jednoducho kliknúť na malá ikona Play na paneli podponúk, aby ste makro spustili.
Uvidíte, že vyskakovacie okno s hlásením vám poskytne číslo deklarujúce polohu textu, ktorý ste chceli skontrolovať.
Vysvetlenie:
Náš primárny reťazec " Šťastie je voľba " je veta s 21 písmenami (s medzerami) a my sme chceli nájsť pozíciu textu " výber " v tomto reťazci. Text " výber " začal od 16. pozície primárneho reťazca, preto sme dostali číslo 16 ako náš výstup v okne správy.
2. VBA na vyhľadávanie textu z konkrétnej pozície v reťazci
Teraz zistíme, čo by sa stalo, keby sme chceli získať pozíciu z určitého čísla.
- Rovnaký spôsob ako predtým, otvoriť Editor jazyka Visual Basic z Vývojár karta a Vložte a Modul v okne kódu.
- V okne kódu napíšte jednoduchý InStr a v argumente start odovzdajte hodnotu podľa pozície, od ktorej chcete text počítať.
Sub INSTR_Example() MsgBox InStr(17, "Šťastie je voľba", "voľba") End Sub
- Ďalšie, Spustiť kód.
Uvidíte, že vyskakovacie okno s hlásením vám poskytne číslo deklarujúce polohu textu začínajúc z určitej pozície ktoré ste chceli skontrolovať.
Vysvetlenie:
Ako sme už vedeli (z diskusie v prvej fáze), text " výber " začal z pozície 16 , takže sme vložili dve " výber " v primárnom reťazci a nastavte 17 ako náš 1. parameter, aby sme preskočili prvý " výber ". Takže sme Spustiť vyššie uvedené makro a ukázalo nám to číslo pozície 27 čo je presne číslo pozície druhý " výber " v danom reťazci.
3. VBA na vyhľadávanie textu pomocou funkcie InStr v reťazci s rozlišovaním veľkých a malých písmen
Od zavedenia InStr už viete, že v predvolenom nastavení InStr Funkcia rozlišuje veľké a malé písmená. Zistíme to na príklade.
Pozrite si tieto informácie VBA kód, kde sme chceli nájsť pozíciu slova " Výber " s veľké "C" v reťazci " Šťastie je voľba ", kde je voľba napísaná s malé "c" .
- Spustiť kód a nájdite 0 ako náš výstup.
Je to preto, že InStr funkcia ošetruje veľké "C" a malé "c" inak. Vyhľadal teda slovo " Výber " v reťazci a nezískal žiadnu zhodu, preto vrátil 0 .
- Aby sa InStr funkcia rozlišovanie veľkých a malých písmen , nastavte argument compare na vbTextCompare (pozri nižšie).
Sub INSTR_Example() MsgBox InStr(1, "Happiness is a choice and choice", "Choice", vbTextCompare) End Sub
- Spustiť kód.
Získate pozícia textu z reťazca, či je text napísaný v veľké alebo malé písmená .
4. VBA na vyhľadávanie textu z pravej strany reťazca
Až doteraz InStr Funkcia nám poskytovala iba pozíciu z ľavej strany reťazca. Ale čo ak chcete zistiť pozíciu textu z pravej strany reťazca.
Funkcia InStrRev vyhľadáva sprava. InStrRev funguje veľmi podobne ako funkcia InStr a nájde vám pozíciu textu z pravá strana reťazca.
Pozrite si nasledujúce príklady, aby ste pochopili rozdiel.
- Ak spustíme nasledujúci kód s InStr funkcia potom,
nám poskytuje polohu ( 16 ) prvého textu " výber ".
- Ak však spustíme ten istý kód s InStrRev Funkcia potom,
nám poskytuje polohu ( 27 ) posledného textu " výber ".
Podobné čítanie:
- FindNext pomocou VBA v programe Excel (2 príklady)
- Ako nájsť a nahradiť pomocou VBA (11 spôsobov)
- Vyhľadanie presnej zhody pomocou VBA v programe Excel (5 spôsobov)
5. VBA na zistenie pozície znaku v reťazci
Rovnakým spôsobom, ako ste našli text, môžete nájsť aj pozíciu určitého znaku v reťazci.
- Skopírujte nasledujúci kód do VBA kódové okno
Sub Find_Character() Dim z As Long z = InStr("Šťastie je voľba", "e") MsgBox z End Sub
- A Spustiť makro.
Prvý " e " v našom reťazci je na čísle 7 pozícia.
6. VBA na vyhľadávanie podreťazca v reťazci
Tu sa naučíme, ako zistiť, či reťazec obsahuje podreťazec alebo nie.
Aby sme to získali, musíme spustiť Príkaz IF v našom kóde.
- Rovnaký spôsob ako predtým, otvoriť Editor jazyka Visual Basic z Vývojár karta a Vložte a Modul v okne kódu.
- V okne kódu skopírujte nasledujúci kód a vložte ho.
Public Sub FindSub() If InStr("Šťastie je voľba", "voľba") = 0 Then MsgBox "Nenašla sa žiadna zhoda" Else MsgBox "Našla sa zhoda" End If End Sub
Váš kód je teraz pripravený na spustenie.
- Spustiť makro.
Ak váš reťazec obsahuje podreťazec potom dostanete nájdená zhoda v opačnom prípade nevráti žiadnu nájdenú zhodu. V našom príklade sme chceli zistiť, či náš primárny reťazec " Šťastie je voľba " obsahuje slovo " výber " alebo nie. Keď sa tak stane, dostaneme Nájdená zhoda výsledok.
7. VBA na vyhľadanie reťazca v rozsahu buniek
Môžete vyhľadať určitý text v rozsahu buniek reťazca a vrátiť určitý reťazec.
Pozrite sa na nasledujúci príklad, kde nájdeme " Dr. " a keď sa nájde zhoda, vráti sa " Doktor ".
- Nižšie je uvedený kód na získanie vyššie uvedeného výsledku,
Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub
- Spustiť kód a výsledok je uvedený nižšie
- Makro môžete upraviť podľa svojich potrieb. Napríklad, ak chcete nájsť " Prof. " v ľubovoľnej bunke reťazca a získajte " Profesor " ako návrat, potom jednoducho odovzdajte " Prof. " ako hodnotu namiesto " Dr. ." v 4. riadku makra a " Profesor " namiesto " Doktor " v 5. riadku makra a podľa toho definujte číslo rozsahu buniek.
8. VBA na vyhľadávanie reťazca v bunke
Môžete tiež vyhľadanie určitého textu v jednej bunke reťazca a vrátiť určitý reťazec.
- Skopírujte nasledujúci kód a vložte ho do okna kódu.
Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub
Vyhľadá " Dr. " v Bunka B5 a ak nájde zhodu, vráti " Doktor " v Bunka C5 .
- Makro môžete upraviť podľa svojich potrieb. Napríklad, ak chcete nájsť " Prof. " v ľubovoľnej bunke reťazca a získajte " Profesor " ako návrat, potom jednoducho odovzdajte " Prof. " ako hodnotu namiesto " Dr. ." v 2. riadku makra a " Profesor " namiesto " Doktor " v 3. riadku makra a podľa toho definujte referenčné číslo bunky.
Záver
Tento článok vám ukázal, ako nájsť určité texty v reťazci v programe Excel pomocou Makro VBA. Dúfam, že tento článok bol pre vás veľmi prínosný. Neváhajte a položte akékoľvek otázky týkajúce sa tejto témy.