Větvení kódu If ... Else ... End If ve VBA
Publikováno: 7.6.2017

Logické větvení kódu procedury, zavedení funkcí InputBox(), IsNumeric(), IsEmpty() a Offset()
- InputBox()
- isEmpty()
- isNumeric()
Větvení kódu pomocí bloku If ... Else ... End If se používá v případech, kdy se má vykonat příkaz nebo skupina příkazů při splnění stanovené podmínky či naopak. Větvení kódu odpovídá excelovské funkce KDYŽ() s anglickým ekvivalentem funkce IF().
Blok If ... Else ... End if
Jestliže je podmínka vyhodnocena jako PRAVDA (TRUE), pak se vykoná příkaz nebo množina příkazů, které následují ihned za podmínkou. Je-li podmínka vyhodnocena jako NEPRAVDA (FALSE), pak se vykoná příkaz nebo množina příkazů v druhé části kódu.
Option Explicit
Sub podminka()
If podmínka Then
příkazy TRUE
Else
příkazy FALSE
End If
End Sub
Chcete-li do kódu zahrnout druhou podmínku, pak se zápis kódu mění na If ... ElseIf ... Else ... End If. Příkazy skupiny FALSE jsou vykonány v případě, že obě podmínky nejsou splněny.
Option Explicit
Sub podminky()
If podmínka_1 Then
příkazy TRUE #1
ElseIf podmínka_2
příkazy TRUE #2
Else
příkazy FALSE
End If
End Sub
Analogickým způsobem by se do kódu přidaly další podmínky.
Příklad #1
Následující kód vyhodnotí, která z hodnot A a B je větší, pričemž uživatel sám vloží čísla do proměnných pomocí funkce InputBox(). Jestliže je větší hodnota A, pak je pomocí příkazu Msgbox vypsána hláška "A je větší než B". Jsou-li čísla shodná bude vypsána hláška "A je rovno B". Jinak procedura vrátí hlášku "B je větší než A".
Option Explicit
Sub Test_hodnot()
deklarace číselných proměnných
Dim A As Long, B As Long
vložení hodnot do proměnných A a B
A = InputBox("Zadej první číslo", "Porovnání hodnot")
B = InputBox("Zadej druhé číslo", "Porovnání hodnot")
porovnání vložených hodnot
If A > B Then
MsgBox("A je větší než B")
ElseIf A = B Then
MsgBox("A je rovno B")
Else
MsgBox("B je větší než A")
End If
End Sub
Příklad #2
Další procedura vyhodnotí, zda je buňka A1 prázdná či nikoliv. Na vybranou buňku je odkazováno pomocí vlastnosti Selection. Procedura vypíše do dialogového okna hlášku o výsledku testu. Test je vyhodnocen pomocí funkce IsEmpty(), která vrací TRUE nebo FALSE.
Option Explicit
Sub Test_bunky_1()
výběr buňky A1
Range("A1").Select
If IsEmpty(Selection) Then
MsgBox ("Buňka A1 je prázdná")
Else
MsgBox("Buňka A1 není prázdná")
End if
End Sub

Příklad #3
Poslední příklad je velmi podobný předchozímu. Procedura otestuje, zda je v buňce A1 číselná hodnota či nikoliv a do buňky B1 vypíše výsledek testu.
K testu použiji logickou funkci IsNumeric(), která vrací TRUE nebo FALSE. K posunu kurzoru do buňky B1 použiji funkci Offset(), která v češtině odpovídá excelovské funkci POSUN().
Option Explicit
Sub Test_bunky_2()
Dim i As Byte
For i = 1 to 10
výběr buňky A1
Cells(i, 1).Select
If Len(Selection) <> 0 Then
je-li hodnota v buňce nenulové délky (TRUE), pak zjisti, zda je hodnota v buňce číslo či nikoliv
If IsNumeric(Selection) Then
If Selection > 0 Then
Selection.Offset(, 1).Value = "číslo je větší než nula"
ElseIf Selection = 0 Then
Selection.Offset(, 1).Value = "číslo je rovno nule"
Else
Selection.Offset(, 1).Value = "Číslo je menší než nula"
End If
Else
Selection.Offset(, 1).Value = "Hodnota v buňce není číslo"
End If
Else
je-li hodnota v buňce nulové délky (FALSE), pak je buňka prázdná
Selection.Offset(, 1).Value = "Buňka je prázdná"
End If
Next i
přizpůsobení šířky sloupce obsahu
Columns(2).AutoFit
End Sub

