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 |
=
, 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