Obsah
Implementace VBA je nejefektivnější, nejrychlejší a nejbezpečnější metodou pro provádění jakýchkoli operací v Excelu. V tomto článku si ukážeme, jak najít určité řetězce v jiném zadaném řetězci s použitím VBA v aplikaci Excel.
Stáhnout šablonu pro praxi
Bezplatnou cvičnou šablonu Excel si můžete stáhnout zde.
VBA pro vyhledávání v řetězci String.xlsm
Funkce InStr
Microsoft Excel má vestavěnou funkci nazvanou funkce InStr k nalezení pozice konkrétních řetězců v daném řetězci.
Obecná syntaxe:
InStr([start], string1, string2, [compare])
Zde,
Argumenty | Povinné/nepovinné | Definice |
---|---|---|
začít | Volitelně | Počáteční pozice hledání.
|
string1 | Požadované | Řetězec, ve kterém se má hledat, Primární řetězec. |
string2 | Požadované | Řetězec, který se má hledat v primárním řetězci. |
porovnat | Volitelně | Na stránkách InStr je ve výchozím nastavení rozlišována velká a malá písmena. InStr , pak zde můžete předat argument pro provedení určitého porovnání. Tento argument může nabývat následujících hodnot,
Ve výchozím nastavení, InStr bere vbBinaryCompare jako argument pro porovnání. |
8 jednoduchých příkladů na vyhledání konkrétní pozice řetězce v daném řetězci pomocí VBA
Podívejme se na několik jednoduchých příkladů, jak získat pozice určitých řetězců v daném řetězci pomocí VBA .
1. VBA pro zjištění pozice textu v řetězci
Níže je uveden příklad InStr k nalezení pozice textu v řetězci.
- Tisk Alt + F11 na klávesnici nebo přejděte na kartu Vývojář -> Visual Basic otevřít Editor jazyka Visual Basic .
- Ve vyskakovacím okně kódu klikněte na panelu nabídek na možnost Insert -> Modul .
- Nyní v okně kódu napište jednoduchý příkaz InStr program uvnitř Dílčí procedura VBA (viz níže).
Sub INSTR_Example() MsgBox InStr("Štěstí je volba", "volba") End Sub
Váš kód je nyní připraven ke spuštění.
- Tisk F5 na klávesnici nebo na panelu nabídek vyberte možnost Run -> Run Sub/UserForm . Můžete také kliknout na malá ikona Play na panelu podnabídek spustíte makro.
Uvidíte, že vyskakovací okno se zprávou vám nabídne. číslo deklarující polohu textu, který chcete zkontrolovat.
Vysvětlení:
Náš primární řetězec " Štěstí je volba " je věta o 21 písmenech (s mezerami) a my jsme chtěli najít pozici textu " výběr " v tomto řetězci. Text " výběr " začínal na 16. pozici primárního řetězce, a proto jsme dostali číslo 16 jako náš výstup v poli zprávy.
2. VBA pro vyhledání textu z určité pozice v řetězci
Nyní zjistíme, co by se stalo, kdybychom chtěli získat pozici od určitého čísla.
- Stejným způsobem jako dříve, otevřete Editor jazyka Visual Basic z Vývojář karta a Vložte a Modul v okně kódu.
- V okně kódu napište jednoduchý příkaz InStr a v argumentu start předejte hodnotu podle pozice, od které chcete text počítat.
Sub INSTR_Example() MsgBox InStr(17, "Štěstí je volba", "volba") End Sub
- Další, Spustit kód.
Uvidíte, že vyskakovací okno se zprávou vám nabídne číslo deklarující polohu textu začíná z určité pozice které jste chtěli zkontrolovat.
Vysvětlení:
Jak jsme již věděli (z diskuse v první fázi), text " výběr " začal z pozice 16 , takže jsme vložili dvě " výběr " v primárním řetězci a nastavte 17 jako náš 1. parametr, abychom přeskočili první " výběr ". Takže jsme Spustit výše uvedené makro a ukázalo nám to číslo pozice 27 což je přesně číslo pozice druhý " výběr " v daném řetězci.
3. VBA pro vyhledávání textu pomocí funkce InStr v řetězci s rozlišováním malých a velkých písmen
Od zavedení InStr již víte, že ve výchozím nastavení InStr Funkce rozlišuje malá a velká písmena. Zjistíme to na příkladu.
Viz následující VBA kód, kde jsme chtěli najít pozici slova " Volba " s velké "C" v řetězci " Štěstí je volba ", kde je volba napsána s malé "c" .
- Spustit kód a najděte 0 jako náš výstup.
To proto, že InStr funkce zpracovává velké "C" a malé "c" jinak. Proto vyhledal slovo " Volba " v řetězci a nezískal žádnou shodu, takže vrátil 0 .
- Chcete-li provést InStr funkce rozlišování velkých a malých písmen , nastavte argument compare na vbTextCompare (viz níže).
Sub INSTR_Example() MsgBox InStr(1, "Štěstí je volba a výběr", "Volba", vbTextCompare) End Sub
- Spustit kód.
Získáte pozice textu z řetězce, ať už je text zapsán v jazyce velká nebo malá písmena .
4. VBA pro vyhledávání textu z pravé části řetězce
Až dosud InStr Funkce nám poskytovala pouze pozici z levé strany řetězce. Ale co když chcete zjistit pozici textu z pravé strany řetězce.
Funkce InStrRev vyhledává zprava. InStrRev funguje velmi podobně jako funkce InStr a najde vám pozici textu ze souboru pravá strana řetězce.
Rozdíl je uveden v následujících příkladech.
- Pokud spustíme následující kód s InStr funkce pak,
nám dává polohu ( 16 ) prvního textu " výběr ".
- Pokud však spustíme stejný kód s InStrRev Funkce pak,
nám dává polohu ( 27 ) posledního textu " výběr ".
Podobné čtení:
- FindNext pomocí VBA v aplikaci Excel (2 příklady)
- Jak najít a nahradit pomocí VBA (11 způsobů)
- Hledání přesné shody pomocí VBA v aplikaci Excel (5 způsobů)
5. VBA pro zjištění pozice znaku v řetězci
Stejným způsobem jako text můžete zjistit i pozici určitého znaku v řetězci.
- Zkopírujte následující kód do svého VBA kódové okno
Sub Find_Character() Dim z As Long z = InStr("Štěstí je volba", "e") MsgBox z End Sub
- A Spustit makro.
První " e " v našem zadaném řetězci je na čísle 7 pozice.
6. VBA pro vyhledání podřetězce v řetězci
Zde se naučíme, jak zjistit, zda řetězec obsahuje podřetězec nebo ne.
Abychom toho dosáhli, musíme spustit Příkaz IF v našem kódu.
- Stejným způsobem jako dříve, otevřete Editor jazyka Visual Basic z Vývojář karta a Vložte a Modul v okně kódu.
- V okně kódu zkopírujte a vložte následující kód.
Public Sub FindSub() If InStr("Štěstí je volba", "volba") = 0 Then MsgBox "Nenalezena shoda" Else MsgBox "Nalezena shoda" End If End Sub
Váš kód je nyní připraven ke spuštění.
- Spustit makro.
Pokud vaše řetězec obsahuje podřetězec pak získáte nalezena shoda , v opačném případě nevrátí žádnou nalezenou shodu. V našem příkladu jsme chtěli zjistit, zda náš primární řetězec " Štěstí je volba " obsahuje slovo " výběr " nebo ne. Jakmile se tak stane, dostaneme Nalezena shoda výsledek.
7. VBA pro vyhledání řetězce v rozsahu buněk
Můžete vyhledat určitý text v rozsahu buněk řetězce a vrátit určitý řetězec.
Podívejte se na následující příklad, kde najdeme " Dr. ", a když se najde shoda, vrátí se " Doktor ".
- Níže je uveden kód pro získání výše 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
- Spustit kód a výsledek je uveden níže
- Makro můžete upravit podle svých potřeb. Například pokud chcete najít " Prof. " v libovolné buňce řetězce a získáte " Profesor " jako návrat, pak jednoduše předejte " Prof. " jako hodnotu místo " Dr. ." ve 4. řádku makra a " Profesor " místo " Doktor " v 5. řádku makra a podle toho definujte číslo rozsahu buněk.
8. VBA pro vyhledání řetězce v buňce
Můžete také vyhledání určitého textu v jedné buňce řetězce a vrátit určitý řetězec.
- Zkopírujte následující kód a vložte jej 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
Vyhledá " Dr. " v Buňka B5 a pokud najde shodu, vrátí " Doktor " v Buňka C5 .
- Makro můžete upravit podle svých potřeb. Například pokud chcete najít " Prof. " v libovolné buňce řetězce a získáte " Profesor " jako návrat, pak jednoduše předejte " Prof. " jako hodnotu místo " Dr. ." ve 2. řádku makra a " Profesor " místo " Doktor " ve 3. řádku makra a podle toho definujte referenční číslo buňky.
Závěr
Tento článek vám ukázal, jak v aplikaci Excel najít určité texty v řetězci pomocí Makro VBA. Doufám, že pro vás byl tento článek velmi přínosný. Neváhejte se zeptat na jakékoli otázky týkající se tohoto tématu.