IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 3 - Podmíněné příkazy ve VBA

V předchozím kvízu, Kvíz - Úvod do VBA, datové typy, jsme si ověřili nabyté zkušenosti z předchozích lekcí.

Logické operátory a operátory porovnání vytvářejí logické výrazy, jejichž vyhodnocením získáme výsledek PRAVDA, angl. TRUE, nebo NEPRAVDA, angl. FALSE. Logických výrazů se využívá v podmíněných příkazech, které umožňují větvit program do více částí, podle výsledku podmíněného výrazu.

Ve VBA se u výsledků logických výrazů používá výhradně anglických výrazů True/False.

Operátory porovnání

Operátor Název Příklad Výsledek
> větší než 3>9 False
< menší než 3<9 True
= rovno 6=6 True
>= větší nebo rovno 5>=4 True
<= menší nebo rovno 5<=4 False
<> není rovno 5<>5 False
Like shoduje se s (lze používat zástupné znaky) máslo Like ?ás* True
Is porovnání objektů, bude objasněno později    

Pokud vás zarazí znak =, který jsem dříve definoval jako znak přiřazení, jde o použití v kontextu, tedy tam, kde program očekává přiřazení, provede přiřazení a tam, kde očekává operátor porovnání, provádí logický test.

Spojování logických výrazů

Často potřebujeme vyhodnotit několik logických výrazů a pracovat s jejich výsledkem. Základní operátory propojení dvou logických výrazů jsou And a Or. Platí poměrně snadná pomůcka pro použití těchto operátorů:

And dává výsledek True pouze, pokud mají oba spojené výrazy hodnotu True.

(10 > 5) And (5 < 10) 'výsledek je True

Or dává výsledek True v případě, že alespoň jeden ze spojených výrazů má hodnotu True.

(10 > 5) Or (5 > 10)  'výsledek je True

Příkazy rozhodovací nebo též podmíněné

Rozhodovací příkaz If...Then je zcela obecný. Je to základní rozhodovací struktura ve VBA. Další rozhodovací příkazy usnadňují některé vybrané konstrukce.

Příkaz If..Then

Vyhodnotí zapsanou podmínku za klíčovým slovem If. Podle výsledku vykoná buď část za klausulí Then pro PRAVDA, nebo jinou část za klausulí Else pro NEPRAVDA. Ve zjednodušené verzi může druhá část chybět, tedy ta, která provádí příkazy pro NEPRAVDA.

If x>5 Then
   (zde budou příkazy pro případ, že podmínka je pravdivá)
Else
   (zde budou příkazy pro případ, že podmínka není pravdivá)
End If

Zkrácená verze příkazu If je tato:

If x>5 Then
   (zde budou příkazy pro případ, že podmínka je pravdivá)
End If

Funkce Select Case

Ve funkci se vyhodnotí testovaný výraz. Jeho výsledkem musí být hodnota (logická, číselná nebo string) a podle výsledné hodnoty se vyhledá první shodná konstanta nebo výraz za klausulí Case (ta musí být stejného datového typu jako výsledek testovaného výrazu) a vykonají se příkazy až po další klausuli Case.

Příklad: převedeme číselné školní známky na jejich slovní vyjádření

Select Case //Testovaný výraz//
Case 1
    Slovo = „Výborný“
Case 2
    Slovo = „Chvalitebný“
Case 3, 4, 5             'je možno použít také seznam konstant
    Slovo = „No dobrá“
End Select

Funkce IIf()

Tato funkce je zjednodušenou verzí příkazu If...Then. Prvním výrazem ve funkci je podmínka, která se vyhodnocuje jako logický výraz. Při výsledku PRAVDA je hodnotou funkce druhý výraz, v opačném případě je hodnotou funkce třetí výraz.

Funkce IIf() má hned dvě výhody:

  • Za prvé vrací hodnotu, kterou lze přímo použít ve výrazu nebo v jiné funkci.
  • Za druhé, funkci lze řetězit, takže místo druhého nebo třetího výrazu můžeme opět použít tuto funkci a vyhodnotit tak více než jednu podmínku.

Jednoduchá funkce:

IIf(x<4, „známka je dobrá“, „známka se kloní k pětce“)

Funkce Choose()

Tato funkce jako podmínku vyhodnocuje výraz numerický (= index), zapsaný jako první výraz. Z následujícího seznamu výrazů vybere ten s odpovídajícím pořadím, který je hodnotou funkce. Pořadí se počítá od jedničky jako souvislá posloupnost.

Choose(vZnamka, "Výborný", "Chvalitebný", "Dobrý", "Dostatečný", "Nedostatečný")

Funkce Switch()

Funkce zjednodušující hledání výsledku při více podmínkách. Jde o seznam dvojic logický výraz a výraz pro pravda. Pokud je logický výraz vyhodnocen jako TRUE, hodnotou funkce je výraz pro pravda. Změna proti předchozí funkci Choose() je ta, že seznam nemusí být souvislý a podmínka, zapsaná v každé dvojici, musí být logická. Může být i složitější.

Switch(vZ = 1, "Výborný", vZ >= 2, "Nevhodný")

Příklady použití logických funkcí

Funkce fnIf ukazuje obecný podmíněný příkaz ve VBA. Řazením IfThen… do kaskády lze vyřešit i hodně složité logické podmínky a jejich kombinace. Zde uvedený příklad je lépe řešitelný dále následujícími funkcemi:

Option Explicit

Public Function fnIf()
Dim vB As String
Dim vZnamka As Integer
´naplnění testované proměnné
    vZnamka = 5
´podmíněné příkazy
    If vZnamka = 1 Then
        vB = "Výborný"
    Else
    If vZnamka = 2 Then
        vB = "Chvalitebný"
    Else
    If vZnamka = 3 Then
        vB = "Dobrý"
    Else
    If vZnamka = 4 Then
        vB = "Dostatečný"
    Else
        vB = "Nedostatečný"
    End If  ' if 4
    End If  ' if 3
    End If  ' if 2
    End If  ' if 1

    Debug.Print vB
End Function

Přehledným způsobem funkce fnSelect poskytuje stejnou službu, jako funkce předchozí pomocí Select Case. Klausule Case Else umožňuje efektivně ošetřit také špatný vstup.

Public Function fnSelect()
Dim vZnamka As Integer
Dim vText As String
´naplnění proměnné
    vZnamka = 7
´vyhodnocování proměnné
    Select Case vZnamka
    Case 1
        vText = "Výborný"
    Case 2
        vText = "Chvalitebný"
    Case 3
        vText = "Dobrý"
    Case 4
        vText = "Dostatečný"
    Case 5
        vText = "Nedostatečný"
    Case Else
        vText = "NEZADÁNO"
    End Select

    Debug.Print vText
End Function

Funkce fnIIf ukazuje řetězení funkcí IIf tak, že místo třetího výrazu je uvedena další funkce IIf. Tímto vnořením se zápis stává poněkud nepřehledný, zejména pokud jsou výrazy složitější a vnoření vícenásobné.

Public Function fnIIf()
Dim vB As String
Dim vZ As Integer
    vZ = 4
    vB = IIf(vZ = 1, "Výborný", IIf(vZ = 2, "Chvalitebný", IIf(vZ = 3, "Dobrý", IIf(vZ = 4, "Dostatečný", "Nedostatečný"))))
    Debug.Print vB
End Function

Pokud chceme hledat podle indexu v poli nebo souvislém seznamu, je funkce Choose ideální. Přehledný zápis a jednoduchost ukazuje funkce fnChoose. Nevýhodou je, že nelze ošetřit případné hodnoty mimo zadanou množinu.

Public Function fnChoose()
Dim vB As String
Dim vZnamka As Integer
    vZnamka = 2
    vB = Choose(vZnamka, "Výborný", "Chvalitebný", "Dobrý", "Dostatečný", "Nedostatečný")
    Debug.Print vB
End Function

Funkce fnSwitch dává přehled o řazení podmínek a při splnění jejich realizaci, jak jdou v zápisu funkce Switch. Tím, že je vždy u každého případu uveden podmíněný výraz, je tato funkce obecnější, než funkce Choose a poměrně jednoduše lze ošetřit chybné zadání, zde následující dvojice po výrazu „Nedostatečný“.

Public Function fnSwitch()
Dim vB As String
Dim vZ As Integer
    vZ = 1
    vB = Switch(vZ = 1, "Výborný", vZ = 2, "Chvalitebný", vZ = 3, "Dobrý", vZ = 4, "Dostatečný", vZ = 5, "Nedostatečný", vZ < 1, "Nízké číslo", vZ > 5, "Vysoké číslo")
    Debug.Print vB
End Function

To je v dnešní lekci vše.

V příští lekci, Příkazy cyklu a složené datové typy ve VBA, se naučíme deklarovat složené datové typy a zpracování v cyklech


 

Předchozí článek
Kvíz - Úvod do VBA, datové typy
Všechny články v sekci
Základy Microsoft VBA
Přeskočit článek
(nedoporučujeme)
Příkazy cyklu a složené datové typy ve VBA
Článek pro vás napsal Luboš Marvan
Avatar
Uživatelské hodnocení:
49 hlasů
Snahou autora je žít podle svého
Aktivity