IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

3. diel - Podmienené príkazy vo VBA

V minulej lekcii, Dátové typy vo VBA , sme si definovali dátové typy, operátory a napísali sme jednoduché funkcie.

Logické operátory a operátormi nákupný vytvárajú logické výrazy, ktorých vyhodnotením získame výsledok PRAVDA, angl. TRUE, alebo NEPRAVDA, angl. FALSE. Logických výrazov sa využíva v podmienených príkazoch, ktoré umožňujú vetviť program do viacerých častí, podľa výsledku podmieneného výrazu.

Vo VBA sa u výsledkov logických výrazov používa výhradne anglických výrazov True / False.

Operátormi porovnanie

operátor Názov Príklad výsledok
> väčší než 3 > 9 False
< menšie ako 3 < 9 True
= presne 6 = 6 True
>= väčšie alebo rovné 5 > = 4 True
<= menšie alebo rovné 5 <= 4 False
<> nerovná 5 <> 5 False
Like zhoduje sa s (možno používať zástupné znaky) maslo Like? ás * True
Is nákupný objektov, bude objasnené neskôr
Ak vás zarazí znak =, ktorý som predtým definoval ako znak priradenie, ide o použitie v kontexte, teda tam, kde program očakáva priradenie, vykoná priradenie a tam, kde očakáva operátor porovnania, vykonáva logický test.

Spájanie logických výrazov

Často potrebujeme vyhodnotiť niekoľko logických výrazov a pracovať s ich výsledkom. Základné operátormi prepojenie dvoch logických výrazov sú And a Or. Platí pomerne jednoduchá pomôcka pre použitie týchto operátorov:

And dáva výsledok True iba, ak majú obaja spojené výrazy hodnotu True.

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

Or dáva výsledok True v prípade, že aspoň jeden zo spojených výrazov má hodnotu True.

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

Príkazy rozhodovacej alebo tiež podmienené

Rozhodovací príkaz If... Then je úplne obyčajný. Je to základná rozhodovacej štruktúra vo VBA. Ďalšie rozhodovacie príkazy uľahčujú niektoré vybrané konštrukcie.

Príkaz If.. Then

Vyhodnotí zapísanou podmienku za kľúčovým slovom If. Podľa výsledku vykoná buď časť za klauzúl Then pre PRAVDA, alebo inú časť za klauzúl Else pre NEPRAVDA. V zjednodušenej verzii môže druhá časť chýbať, teda tá, ktorá vykonáva príkazy pre 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

Skrátená verzia príkazu If je táto:

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

Funkcia Select Case

Vo funkcii sa vyhodnotí testovaný výraz. Jeho výsledkom musí byť hodnota (logická, číselná alebo string) a podľa výslednej hodnoty sa vyhľadá prvé zhodná konštanta alebo výraz za klauzúl Case (tá musí byť rovnakého dátového typu ako výsledok testovaného výrazu) a vykonajú sa príkazy až po ďalšej klauzulu Case.

Príklad: prevedieme číselné školské známky na ich slovné vyjadrenie

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

Funkcia IIf()

Táto funkcia je zjednodušenou verziou príkazu If... Then. Prvým výrazom vo funkcii je podmienka, ktorá sa vyhodnocuje ako logický výraz. Pri výsledku PRAVDA je hodnotou funkcia druhý výraz, v opačnom prípade je hodnotou funkcia tretej výraz.

Funkcia IIf() má hneď dve výhody:

  • Po prvé vracia hodnotu, ktorú možno priamo použiť vo výraze alebo v inej funkcii.
  • Po druhé, funkciu možno reťaziť, takže namiesto druhého alebo tretieho výrazu môžeme opäť použiť túto funkciu a vyhodnotiť tak viac ako jednu podmienku.

Jednoduchá funkcie:

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

Funkcia Choose()

Táto funkcia ako podmienku vyhodnocuje výraz numerický (= index), zapísaný ako prvý výraz. Z nasledujúceho zoznamu výrazov vyberie ten so zodpovedajúcim poradím, ktorý je hodnotou funkcie. Poradie sa počíta od jednotky ako súvislá postupnosť.

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

Funkcia Switch()

Funkcia zjednodušujúce hľadanie výsledku pri viacerých podmienkach. Ide o zoznam dvojíc logický výraz a výraz pre pravda. Ak je logický výraz vyhodnotený ako TRUE, hodnotou funkcia je výraz pre pravda. Zmena proti predchádzajúcej funkcii Choose() je tá, že zoznam nemusí byť súvislý a podmienka, zapísaná v každej dvojici, musí byť logická. Môže byť aj zložitejšie.

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

Príklady použitia logických funkcií

Funkcia fnIf ukazuje všeobecný podmienený príkaz vo VBA. Radením If... Then... do kaskády dá vyriešiť aj veľa zložité logické podmienky a ich kombinácie. Tu uvedený príklad je lepšie riešiteľný ďalej nasledujúcimi funkciami:

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

Prehľadným spôsobom funkcie fnSelect poskytuje rovnakú službu, ako funkcie predchádzajúci pomocou Select Case. Klauzula Case Else umožňuje efektívne ošetriť tiež zlý 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

Funkcia fnIIf ukazuje reťazenie funkcií IIf tak, že namiesto tretieho výrazu je uvedená ďalšie funkcie IIf. Týmto vnorením sa zápis stáva trochu neprehľadný, najmä ak sú výrazy zložitejšie a vnorenia viacná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

Ak chceme hľadať podľa indexu v poli alebo súvislom zozname, je funkcia Choose ideálne. Prehľadný zápis a jednoduchosť ukazuje funkcie fnChoose. Nevýhodou je, že nemožno ošetriť prípadné hodnoty mimo zadanú 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

Funkcia fnSwitch dáva prehľad o radenie podmienok a pri splnení ich realizácii, ako idú v zápise funkcie Switch. Tým, že je vždy pri každom prípade uvedený podmienečný výraz, je táto funkcia všeobecnejší, než funkcie Choose a pomerne jednoducho možno ošetriť chybné zadanie, tu nasledujúce dvojice po výraze "Nedostatoč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šnej lekcii všetko.

V budúcej lekcii, Príkazy cyklu a zložené dátové typy vo VBA , sa naučíme deklarovať zložené dátové typy a spracovania v cykloch


 

Predchádzajúci článok
Dátové typy vo VBA
Všetky články v sekcii
Základy Microsoft VBA
Preskočiť článok
(neodporúčame)
Príkazy cyklu a zložené dátové typy vo VBA
Článok pre vás napísal Luboš Marvan
Avatar
Užívateľské hodnotenie:
2 hlasov
Snahou autora je žít podle svého
Aktivity