VBA – 6# Lekce – Textové funkce

V dnešní lekci se podíváme na práci s textem. Bude se jednat o úpravy textu vyhledávání znaků zjišťování délky řetězce pomocí zabudovaných funkcí, které nalezneme ve VBA. Abychom mohli efektivně pracovat s textovými řetězci, potřebujeme znát právě tyto funkce. Aby se nám lépe demonstrovaly jednotlivé funkce, uvažujme, že máme proměnnou txt, ve které máme uložen text ‚abeceda je veda‘. V kódu zapsáno takto txt=‘abeceda je veda‘. Nyní se již vrhněme na jednotlivé funkce

Funkce Len

nám zjistí počet znaků v textu. Jako jediný parametr požaduje právě text, který má spočítat. Text může být reprezentován jak proměnnou, tak samotným textem v uvozovkách.

Ukázka syntaxe:

Delka=len(txt)
Msgbox(len(txt))

V prvním řádku jde o uložení délky proměnné txt do proměnné délka. Na druhém řádku, dojde k vypsání délky v naše případě se vypíše číslo 15. Je nutné mít na paměti, že do délky textového řetězce se započítávají jak mezery, tak znaménka tak čísla. K lepšímu zapamatování této funkce uvedu, že len je zkrácenina slova length, které v překladu z angličtiny znamená délka ;).

Instr

jedná se o vyhledávací funkci. Zde už se setkáváme s mírně složitějším zapsáním.  Tato fůnkce vyžaduje hned tři parametry, ale není se čeho bát, všechny tři vyplývají z logiky této funkce. Nejdříve tedy musíme zadat startovní pozici to je pozice, na které se začne vyhledávat, jako druhý argument zadáme, kde se má hledat, čili v jakém textovém řetězci v našem modelovém příkladu to bude proměnná txt, jako poslední chce funkce znát hledaný řetězec, který musí být uveden v uvozovkách, hledat můžeme jak jednotlivé znaky, tak i více znaku najednou ba do konce i celé věty podmínka je však, že musí být ohraničeno uvozovkami.

Ukázka syntaxe

Msgbox Instr(1,txt,“j“)

Vidíme tedy, že funkce bude vyhledávat od první pozice v proměnné txt a bude hledat znak „j“.  V našem případě, tedy vrátí hodnotu 9. Pokud bychom hledali více znaků, funkce vrátí vždy pozici, na které hledaný řetězec začíná. Pokud bychom hledali slovní spojení „je“ funkce vrátí opět 9.

Left

Při použití této funkce dojde k vrácení jenom určité části textu. Konkretně vrací zadaný počet znaků od začátku námi zvoleného textového řetězce. Z čeho vyplývá, že požaduje dva parametry textový řetězec odkud bude vracet znaky a počet znaků.

Ukázka syntaxe

Msgbox left(txt,7)
Kus_textu=left(text,7)

S takto zadanou funkcí dostaneme na výsledku slovo „abeceda“. Na druhém řádku se nic nevypisuje, pouze uložíme výstup z funkce do nové proměnné. Je třeba si uvědomit, že funkce nic nemění, pouze vypisuje pokud tedy chceme pracovat jen s určitou části, musíme si ji uložit do jiné proměnné, jako jsem naznačil na druhém řádku.

Right 

tato funkce je zcela totožná jako výše uvedená left jediné co se mění je, že tato funkce zobrazuje znaky zprava nebo chcete-li od konce textového řetězce syntaxe je zcela stejná. Pomocí této funkce můžeme zjistit také velice jednoduše poslední znak v textu.

Ukázka syntaxe

Msgbox right(txt,7)

Toto nám vypíše retězec „je veda“

Mid

nám umožní zobrazit určitou část textu. Vyžaduje k tomu tři parametry, první z nich je jak už jste si asi zvykli, textový řetězec odkud budeme část vybírat v našem případě tedy opět txt. Jako druhý parametr chce funkce znát číslo, které reprezentuje pozici, odkud má začít brát znaky a jako poslední chce číslo, které zastupuje počet zobrazených znaků.

Ukázka syntaxe

Msgbox mid(txt,9,2)

Takto zapsaný řádek nám vypíše pomocí msgboxu prostřední část našeho textu tedy „je“ funkce tedy vrací námi zadaný interval znaku pomoci počáteční pozice a počtu znaků.

Ucase

tato funkce převádí zadaný textový řetězec na velká písmena, vyžaduje pouze jeden parametr a to řetězec, který chceme převést.

Ukázka syntaxe

Ucase(„ahoj“)

Toto vrátí  „AHOJ“.

Lcase

je pravý opak Ucase znamená to tedy, že převede textový řetězec na malé znaky.

vbCrlF

Nejde o funkci spíš o jakousi konstantu, která nám v kódu nahrazuje funkci enter. Jedná se tedy o zalomení řádku. Používá se například při výpisu v Msgboxu pro zpřehlednění informace. Nebo v komentáři u inputboxu. Ukážeme si použití.

Ukázka syntaxe

Msgbox(„Textový řetězec  1“ & vbcrlf & „Textový řetězec 2“ & vbcrlf & „Textový retězec 3“)
Inputbox(„Textový řetězec  1“ & vbcrlf & „Textový řetězec 2“)

U inputboxu se nám řádky zalamují na místě pro popis, je možné tedy přehledně stylovat zprávy pro uživatele jaká data má zadávat.

Příklad 1. Zde si pouze ukážeme vše co jsme si výše popsali.

Sub priklad1()

txt = "abeceda je věda"

MsgBox ("délka je (funkce len) " & vbCrLf & Len(txt))
MsgBox ("hledaný řetězec je na pozici (funkce Instr) " & vbCrLf & InStr(1, txt, "j"))
MsgBox ("funkce left " & vbCrLf & Left(txt, 4))
MsgBox ("funkce right " & vbCrLf & Right(txt, 7))
MsgBox ("funkce mid " & vbCrLf & Mid(txt, 9, 2))
MsgBox ("Vše na velké (funkce Ucase) " & vbCrLf & UCase(txt))

End Sub 

Příklad 2. Nyní si ukažme trošku těžší avšak z mého pohledu velmi praktický příklad.

Uživatel zadá textový řetězec a následně bude dotázán na hledaný znak. Program vypíše, kolikrát se znak v řetězci objevuje a na jakých pozicích.

Sub priklad1b()
    Dim Text As String
    Dim hledany As String
    Dim kde As String
    Dim pozice As Integer
    Dim Cetnost As Integer
    Dim pocatek As Integer
    
    Text = InputBox("zadej text")
    hledany = InputBox("zadej hledany text")
    
    pocatek = 1
    Do
        pozice = InStr(pocatek, Text, hledany)
        If pozice > 0 Then
            Cetnost = Cetnost + 1
            kde = kde + Str(pozice) + ","
            pocatek = pozice + 1
        End If
    Loop Until pozice = 0
    
    MsgBox ("cetnost:" + Str(Cetnost) + ";  " + "pozice:" + kde)


End Sub

Popis kódu již snad není nutný. Hlavní funkcí pro tento příklad je InStr. Pokud by však někomu dělalo potíže porozumět, doporučuji pustit si program debugem a projít si jednotlivé kroky a podívat se co se kam načítá a co se s kódem děje.

Závěr

To bude pro dnešek vše. Příště se podíváme na skládání textových funkcí a zadáme si nějaké komplexnější příklady na procvičení těchto funkci. Příklady budou podobného typu dnešního 2. příkladu budou tedy i trochu prakticky využitelné 😉 máte se tedy na co těšit.