Textové funkce Len(), InStr() a Left() ve VBA
Publikováno: 7.7.2017

Zjištění délky textového řetězce, určení pozice znaku v textovém řetězci a úprava textového řetězce
- Len()
- InStr()
- Left()
Používání textových funkcí je v MS Excel poměrně frekventovaná záležitost. Jazyk VBA disponuje funkcemi, které vrací například délku textového řetězce, pozici hledaného znaku v řetězci a požadovaný počet znaků z řetězce.
Konkrétně představím funkce Len(), InStr() a Left(), které vykonávají výše uvedené operace.
Délka textového řetězce
Délku textového řetězce zajistíte pomocí funkce Len(). Funkce vrací počet znaků řetězce.
Len(řetězec)
V české lokalizaci této funkce odpovídá excelovská funkce DÉLKA().
Funkce Len() #1
Následující procedura vypíše v okně Editoru VBA počet znaků řetězce "Ahoj světe!". Výpis v okně Immediate zajistí příkaz Debug.Print. Okno Immediate se používá pro ladění kódu.

Funkce Len() #2
Funkci Len() lze použít také v případě, kdy potřebujete zjistit, zda buňka má nějaký obsah. Na obsah buňky můžete navázat nějakou operaci.
Například následující procedura otestuje obsah buněk v rozsahu A1:A10. Je-li buňka neprázdná, procedura zabarví pozadí buňky zelenou barvou pomocí Interior.Color. Jinak zabarví pozadí buňky žlutou barvou.
Sub Obsah_bunky()
Dim i As Byte
Range("A1").Select
For i = 1 to 10
If Len(Cells(i, 1)) > 0 Then
Cells(i, 1).Interior.Color = RGB(0, 255, 0)
Else
Cells(i, 1).Interior.Color = RGB(255, 255, 0)
End If
Next i
End Sub

Funkce Len() #3
Další procedura vyhledá prázdné buňky v tabulce. První sloupec tabulky obsahuje ID zákazníka a druhý sloupec obsahuje Název zákazníka. Tabulka není udržovaná a některé názvy zákazníků nejsou k dispozici. Cílem procedury je vyhledat prázdné buňky ve sloupci Název zákazníka a do sousední buňky vložit text "n/a" (not available) plus vypsat počet prázdných buněk v dialogovém okně.
deklarace proměnných
Dim i As Long, posledniradek As Long
Dim pocet As Long
počet řádků ve sloupci A a nastaveni proměnné POCET
posledniradek = Cells(Rows.Count, "A").End(xlUp).Row
pocet = 0
výpis hlášky "ok" nebo "n/a"
For i = 2 To posledniradek
If Len(Cells(i, 2)) > 0 Then
Cells(i, 3).Offset() = "ok"
Else
Cells(i, 3).Offset() = "n/a"
pocet = pocet + 1
End If
Next i
vypis počtu prázdných buněk v dialogovém okně
MsgBox pocet
End Sub
Následující obrázek obsahuje výsledek procedury.

Úprava textových řetězců
Nyní přichází na řadu funkce, které prochází textové řetězce a vrací pořadí hledané znaku a požadovaný počet znaků od počátku řetězce. První textovou funkcí je funkce InStr(), která vrací pozici hledaného znaku v textovém řetězci.
InStr(řetězec, hledaný_znak)
Další funkcí je funkce Left(), které vrací specifikovaný počet znaků od počátku řetězce, tj. zleva.
Left(řetězec, počet_znaků)
Analogické funkce jsou funkce Right() a Mid(), které vrací počet znaků od konce řetězce (zprava) a vybranou část uprostřed řetězce.
Funkce InStr() a Left()
Poslední procedura tohoto příspěvku vyhledá první mezeru v textovém řetězci a vrátí první slovo zleva.
Sub Uprava_retezce()
deklarace proměnných
Dim i As Long, posledniradek As Long, pozice As Long
Dim zleva As String
zjištění počtu řádků
posledniradek = Cells(Rows.Count, "A").End(xlUp).Row
cyklus vyhledá pozici první mezery ve sloupci A a vrátí první slovo zleva
For i = 1 To posledniradek
pozice = InStr(Cells(i, 1), " ")
zleva = Left(Cells(i, 1), pozice)
Cells(i, 2).Value = zleva
Next i
End Sub
Následující obrázek obsahuje výsledek vykonané procedury.

