Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-teorie-zaklady » if-then-elseif-else-podminka-excel-vba

Podmínky If, Then, ElseIf, Else

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

... jestliže, pak... a ne jinak :) Jak VBA program (makro) rozdělit do více větví podle určitých podmínek.

Doplněno: 10.6.2016

Proč podmínky?

Microsoft Excel logo

Při programování ve VBA mnohdy potřebujeme určitým způsobem usměrnit provádění příkazu, neboli větvit program. Využít můžeme příkazy If, Then, ElseIf, Else. Toto větvení může vzdáleně připomínat funkci KDYŽ, která je taktéž k dispozici v programu MS Excel.

Pro přehlednsot je článek rozdělen na kapitoly:


Syntaxe If Then ElseIf Else

Trocha teorie do začátku:

If podmínka_1 Then výsledek_1 ElseIf podmínka_2 Then výsledek_2 ... ElseIf podmínka_n Then výsledek_n Else výsledek_jinak End If

Poznámka: ElseIf, Else jsou volitelné.

Operátory v Then Else

Použití porovnávací operátory:

  • Is
  • Like
  • <
  • >
  • >=
  • <=
  • <>
  • =
If Name Like "*obsahuje*" Then

Použití logické operátory:

  • And
  • Not
  • Or
  • Xor

Podrobněji v článku: Operátory VBA Excel

Podrobněji o operátoru Like v článku: Operátory Like v VBA Excel

If Then

jestliže ... pak

Nejednodušší větvení. Přeloženo do češtiny: jestliže ... pak.

Příklad

´jestliže je odpověď muž pak zobrazí zprávu. IF Odpoved = "muz" Then MsgBox "Jsi muž." End If

Příklad 2

Lze zapsat i do jednoho řádku:

If 8 > 2 Then MsgBox "8 Je větší než 2"

If Then Else

jestliže ... pak... jinak

Trochu složitější větvení. Odpovídá českému: jestliže, pak, jinak.

Příklad


´jestliže je odpověď muž pak zobrazí zprávu jinak zobrazí jinou zprávu

IF Odpoved = "muz" Then MsgBox "Jsi muž." Else MsgBox "Jsi žena." End If

If Then ElseIf Else

jestliže a - pak a ...jestliže b - pak b ... jinak

Nejsložitější, tedy relativně nejsložitější. Tímto způsobem můžeme přehledně usměrnit i velice složitý požadavek.

Příklad

IF Vek < 15 Then MsgBox "Jsi dite." Elseif Vek < 30 Then MsgBox "Jsi mlaďoch." Elseif Vek < 60 Then MsgBox "Jsi v nejlepších letech." Else MsgBox "Jsi téměř v důchodu." End If

Exit z If then

Jak opustit if then:

If Vek < 0 Then Exit Sub End If

Podrobněji v samostatném článku: Exit .

If Then s OR

Jak zkontrolovat dvě podmínky, minimálně jedná musí být splněna. Kontrolována hodnota je umístěna v buňce B14.

Odpoved = Range("B14").Value If Odpoved = "A" Or Odpoved = "B" Or Odpoved = "C" Then MsgBox "Písmeno A, B nebo C" Else MsgBox "Jiné písmeno než A, B, C." End If

If Then s AND

Jak zkontrolovat dvě podmínky, které platí současně. Kontrolované hodnoty musí být umístěny v buňkách B18 a B20.

Odpoved1 = Range("B18").Value Odpoved2 = Range("B20").Value If Odpoved1 = "žena" And Odpoved2 = "ANO" Then MsgBox "Jsi žena kuřačka." ElseIf Odpoved1 = "žena" And Odpoved2 = "NE" Then MsgBox "Jsi žena nekuřačka." ElseIf Odpoved1 = "muž" And Odpoved2 = "NE" Then MsgBox "Jsi muž nekuřák." Else MsgBox "Jsi muž kuřák." End If

If Then s využitím On Error GoTo

Zadat číslo a provést rozhodnutí, zda je sudé, nebo liché. V případě, že je zadáno něco jiného chybová hláška za využití On Error GoTo.

On Error GoTo nalezen_problem Dim number As Integer number = InputBox("Zadej číslo: ") If number Mod 2 = 0 Then MsgBox "Číslo sude!" Else MsgBox "Číslo liché!" End If Exit Sub nalezen_problem: MsgBox "Problém, asi nebylo zadáno číslo :)"

If Then s Google Sheet

Jak na podmínky v Google tabulkách:

function IfThen2() { var i = 2; if (i == 1) { Browser.msgBox( 1 ); } else { Browser.msgBox( "No 1." ); } } // --------------------------------------------- function IfThen3() { var i = 2; if (i == 1) { Browser.msgBox( 1 ); } else if (i == 2) { Browser.msgBox("Number Two."); } else { Browser.msgBox( "No 1, 2." ); } } // --------------------------------------------- function IfThenOR() { var i = 2; if (i == 1 || i == 2) { Browser.msgBox( "i = 1 or i = 2" ); } } // ----------------------------------------------- function IfThenAND() { var i = 2; if (i == 2 && i == 2) { Browser.msgBox( "i = 2 and i = 2" ); } }
Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor If Then Else - praktické příklady - Excel VBA soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.


Souvisejicí články s větvením:

Závěrem

Tento článek je součástí on-line výukového kurzu VBA MS Excel.

Máte nějakou praktická ukázku jak používat podmínky ve VBA. Můžete zmínit v komentářích.

Článek byl aktualizován: 19.09.2020 11:07

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


dominik warto

Přidáno: 02.07.14 12:26

Dobry den prajem, prvy krat vidim VBA, poradte mi prosim ak mozete mam v exceli stlpec A1 s udajmi a potrebujem ich rozsortovat. Zdroj zaciatok = xxx odbor = A titul = dsdasd strany = 10 koniec zaciatok = zzz odbor = B titul = ggdfgs strany = 9 koniec zaciatok = yyy odbor = C titul = ujhre strany = 69 koniec zaciatok = eee odbor = A titul = fsafaf strany = 80 koniec zaciatok = fff odbor = A titul = ghnjkw strany = 6 koniec zaciatok = qqq odbor = B titul = hjgks strany = 16 koniec Potrebujem z tohoto zdroja v stlpci A1 v sheete1 vytvorit Sheety s nazvom odboru teda jednotlive sheete sa budu volat: A, B, C a v tychto sheetoch budu zo sheetu 1, stlpca A1 jednotlive riadky, stlpce (bude to transponovane). Nazvy stlpcov v sheete A budu zaciatok, odbor, titul, strany, koniec. Vysledok: Sheet s nazvom A zaciatok odbor titul strany koniec xxx A dsdasd 10 eee A fsafaf 80 fff A ghnjkw 6 Sheet s nazvom B zaciatok odbor titul strany koniec xxx B ggdfgs 9 xxx B hjgks 16 dakujem uz vopred za pomoc, odpoved, cas.

Pavel Lasák

Přidáno: 28.07.14 16:45

Pro tyto případy je k dispozici kurz jak na VBA v Excel

Poipop

Přidáno: 01.09.14 14:57

Dobrý den. Snažím se udělat podmínku if jestli porovnávaný parametr nabývá nějakou hodnotu z množiny hodnot 1, 3, 5, 7, anebo hodnotu z množiny 2, 4, 6, 8. Pokud ano, pak provede něco, pokud ne, provede něco jiného. Předpokládám, že bude nutno do toho nějak zapojit funkci pole. Něco ve smyslu: if a=(A1:A4) then, else if a=(A5:A8) then, else. Ale zatím se mne nepovedlo přijít na to jak. Napadá vás něco? Něco lepšího než to porovnávat postupně if a=1 then, else if a=2 then, else if a=3 then..... Pokud to hraje roli, potřebuju to obecně, ne pro sudá, a lichá čísla. Množin mám víc a obsahují i sudá i lichá čísla.

Jojo

Přidáno: 03.09.14 07:57

To Poipop: Podľa toho, koľko je tých čísiel(ak sa to má riešiť obecne). Ak ich je menej, tak napr:Select Case TestovaneCislo Case 1, 3, 5, 7 'Ak splnené... Case 2, 4, 6, 8 'Ak splnené... Case Else 'Ostatné prípady End Select --pri väčšom počte by som to riešil napr. cez pole...

Ondra

Přidáno: 30.09.14 19:00

Dobrý den, dostali jsme úkol ve škole že máme vytvořit svojí vlastní funkci, kde přiřadíme různé lidi do dvou skupin. Přesněji máme udělat funkci, která do buňky napíše Dítě jestliže je věk osoby menší než osmnáct a pokud je větší než osmnáct tak je to dospělý.

Jojo

Přidáno: 06.10.14 08:21

To Ondra: -- (Dospelý ak >=18) -- =KDYŽ(A1<18;"Dítě";"dospělý")

Pavel Lasák

Přidáno: 13.10.14 08:04

To Ondra: Více o funkci KDYŽ a jejím použití v samostatném článku KDYŽ - praktické použití logické funkce

Chris

Přidáno: 25.12.15 20:49

Dobrý den, existuje v Excelu způsob, jakým třeba i jinou funkci než IF použít následujícím způsobem? =KDYŽ($F4="Výdaj";"O2-G4";"O2+G4") Vysvětlením: tak aby, pokud v určité buňce bude určité slovo, aby se provedla určitá početní operace? Třeba i složitější funkce? Mám za to, že IF může vrátit jenom přesně definované slovo, a k tomuto úkonu se moc nehodí. Děkuji předem za odpověď.

Polda18

Přidáno: 07.01.16 19:38

Zdravím, není tady někde, jak se dá udělat negace? Tedy, potřebuju rozeznat, zda hodnota NENÍ nulová, podle toho přičítám určité číslo. Mám následující kód: Dim osoby As Variant osoby = ThisWorkbook.Sheets("List1").Range("A3:A36") Dim pocet As Variant pocet = 0 If osoby(1, 1) = Not Null Then pocet = pocet + 1 End If S tím, že těch osob je až 34 :D Řešeno pomocí samostatných Ifů, které jsou po sobě řetězem. Zkontroluje se nejprve první buňka, pokud není prázdná, má se přičíst jednička k počtu osob (na začátku makra se nuluje, pro jistotu). A takhle to pokračuje až k poslední, 34. buňce. Jenže problém je v tom, že ani, když něco napíšu do jedné z kontrolovaných buněk, tak to nechce přičítat. Jak mám definovat nulovou hodnotu a jak to znegovat? :(

Tomáš

Přidáno: 15.01.16 10:41

To Ondra: Pokud to dobře chápu tak ti stačí nahradit řádek: If osoby(1, 1) = Not Null Then řádkem: If osoby(1, 1) <> "" Then Tento zápis znamená přesně to, že hodnota není nulová.

miro

Přidáno: 10.06.16 16:41

subor s prikladmy sa neda stiahnut.

Pavel Lasák

Přidáno: 13.06.16 22:55

To Miro: Opraveno a stažení opět funguje.

PAVEL D

Přidáno: 16.06.16 09:47

Zdravím, tisknu adresní štítky na balíky příklad: náklad je 250 ks balík je 200 ks má to tedy vytisknout 2 štítky označení 1/2 jako první balík ze dvou s balíkem 200 ks, a 2/2 jako druhý ze dvou se zbytkem 50ks. Pokud ale náklad 100 ks a balík 100 ks vytiskne se 1 štítek 1/1 náklad 100 ks a balík 100 ks OK. Jak ale dám náklad třeba 211 ks a balík 200 ks dostanu 3 balíky 2x100 a jeden 11 ks ( mají býd jen 2 1x 100 a 1x 11ks) Můžete někdo poradit, kde je chyba v kódu? Private Sub CommandButton21_Click() Dim i, balik As Long Dim adresa As String Dim naklad As Long Dim celychbaliku As Long Dim poslednibalik As Long 'Dim zbytek As Long EnvironConst1 = Environ("UserName") Titulek_dialogu2 = "zadej náklad" Titulek_dialogu3 = "zadej velikost v balíku" Titulek_dialogu5 = "zadej adresu" 'pocet = InputBox(Titulek_dialogu) naklad = InputBox(Titulek_dialogu2) balik = InputBox(Titulek_dialogu3) adresa = InputBox(Titulek_dialogu5) celychbaliku = naklad / balik poslednibalik = (naklad Mod balik) If poslednibalik > 0 Then celychbaliku = celychbaliku + 1 If poslednibalik = 0 Then celychbaliku = celychbaliku 'If celychbaliku = celychbaliku Then balik = poslednibalik For i = 1 To celychbaliku Cells(30, 2).Value = i & "/" & celychbaliku Cells(29, 4).Value = naklad If i = celychbaliku And poslednibalik = 0 Then Cells(29, 2).Value = naklad If i = celychbaliku And poslednibalik > 0 Then Cells(29, 2).Value = poslednibalik If i < celychbaliku And poslednibalik > 0 Then Cells(29, 2).Value = balik If i < celychbaliku And poslednibalik = 0 Then Cells(29, 2).Value = naklad If i < celychbaliku Then Cells(29, 2).Value = balik Cells(12, 2).Value = adresa ActiveSheet.PageSetup.CenterFooter = ("&B&8 strany: " & i & " / " & celychbaliku) ActiveSheet.PageSetup.LeftFooter = ("&B&8Uživatel: " & EnvironConst1) ''********* vloží do patičky listu - do levého oddílu ****&B&12 - font tučné velikost 8 'ActiveWindow.SelectedSheets.PrintOut ´******************Tisk na předvolenou ActiveSheet.PrintOut Preview:=True '********************Ukázka před tiskem Next i End Sub

Jojo

Přidáno: 17.06.16 07:42

To PAVEL D: -- Zdá sa mi, že v zadaní sú preklepy, ale ak som dobre porozumel otázke, riešil by som to takto: Riadky: celychbaliku = naklad / balik poslednibalik = (naklad Mod balik) If poslednibalik > 0 Then celychbaliku = celychbaliku + 1 If poslednibalik = 0 Then celychbaliku = celychbaliku Nahradiť s: celychbaliku = Int(naklad / balik) poslednibalik = (naklad Mod balik) MsgBox "celychbaliku " & celychbaliku & vbCrLf & "poslednibalik " & poslednibalik

Zdena

Přidáno: 26.11.16 17:34

Vážení, jsemť já dříve narozený a dokonce jsem si dokázal udělat pamětníček, který funguje celý rok. Ve sloupci A 1.1.2016 přidám k dalšímu řádku +1 a táhnu až do konce roku. Ve sloupci A nastavím formát ddd - dd.mm.rrrr a je to. Jenom nevím, jak zadat podmínku, aby se pro so a ne vybarvilo políčko, abych to nemusel dělat ručně. Děkuji za radu

Lukáš

Přidáno: 20.12.16 07:08

Dobrý den, rád bych poprosil o pomoc s VBA (nebo s jiným programovacím jazkykem jsem nikdy nedělal). Snažím se vytvořit funkci s podmínkou IF s podobnou syntaxí... IF v buňce A1 (seznam) bude text "XXX" THEN zapiš do buňky A2 "číslo" ELSEIF atd...stále se mi to nedaří vytvořit :( díky za Váš čas i pomoc!

Jojo

Přidáno: 21.12.16 08:07

To Lukáš:' Range("A1") je možné nahradiť s Cells(1, 1) If Range("A1") = "XXX" Then 'Ak = "XXX" Range("A2") = 11 ' číslo1 ElseIf Range("A1") = "YYY" Then 'Ak = "YYY" Range("A2") = 22 ' číslo2 Else 'Inak rob toto... Range("A2") = "iné" ' text End If







Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |