V dnešním videu se podíváme na to, proč někdy vícenásobná podmínka KDYŽ, anglicky funkce IF, nevrací správný výsledek. Problém, pokud vícenásobná funkce KDYŽ nevrací požadovaný výsledek je většinou v posloupnosti podmínek, na které ve funkci KDYŽ záleží. V dnešním videu si ukážeme, proč na posloupnost podmínek ve funkcích KDYŽ záleží a jak vlastně vyhodnocování podmínek ve vícenásobných funkcích KDYŽ funguje.
Excelový soubor ke stažení:
U použití vícenásobné podmínky KDYŽ si musíte pamatovat, že na posloupnosti podmínek záleží. Nemůžeme tedy podmínky do funkcí napsat v libovolném pořadí. Funkce KDYŽ vyhodnocuje každou podmínku, kterou jsme do funkce KDYŽ napsali v parametru podmínka. Pokud je logická podmínka vyhodnocená jako pravda, tak funkce vrátí hodnotu, kterou jsme napsali do parametru ano, a již další podmínky v následujících funkcích KDYŽ neověřuje. To znamená, že hodnocení podmínek ve funkcích KDYŽ končí, jakmile je první podmínka vyhodnocená jako pravdivá. A právě proto na posloupnosti podmínek u vícenásobné funkce KDYŽ záleží.
V ukázce níže ověřujeme dvě podmínky ve funkcích KDYŽ. Pokud je hodnota na řádku vyšší nebo rovna 10, tak chceme vrátit A. Pokud je hodnota na řádku vyšší nebo rovna 5, tak chceme vrátit B, v opačném případě C.
Podmínka vypadá následovně KDYŽ ($B$4 >= 10 ; “A” ; KDYŽ($B$4 >= 5 ; “B” ; “A” ))
Na prvním řádku je hodnota 10, takže je hned první podmínka vyhodnocená jako pravdivá a proto se vrátí písmeno A.
Na druhém řádku je hodnota 5, to znamená, že první podmínka v první funkci KDYŽ bude vyhodnocená jako nepravdivá, takže se přesune funkce k vyhodnocení druhé podmínky ve druhé funkci KDYŽ, která již splněná bude, jelikož je hodnot rovna 5, a proto se vrátí písmeno B.
Na posledním řádku není splněná ani jedna z podmínek, takže se vrátí písmeno C.
Pojďme si to celé ukázat na praktických příkladech.
V příkladu máme v tabulce produkty a počet prodaných kusů. Naším úkolem je ve sloupci podmínka ověřit dvě podmínky. U produktů, kterých se prodalo více nebo rovno dva kusy, chceme vrátit sousloví Větší než 2 a u produktů, kterých se prodalo více nebo rovno čtyři kusy chceme vrátit sousloví Větší než 4. U ostatních hodnot chceme vrátit nulu.
Musíme ověřit dvě podmínky, takže vytvoříme složenou funkci KDYŽ. A začneme první podmínkou. Takže funkce KDYŽ, kde ověříme, zda je počet prodaných kusů větší nebo roven číslu dva. Pokud ano, tak chceme vrátit „Větší než 2“ a nesmíme zapomenout, že se jedná o text, který musí být uvedený v uvozovkách. A následuje druhá podmínka KDYŽ, kde ověříme druhou podmínku, zda je počet prodaných kusů větší nebo roven číslu 4. A pokud je tato podmínka splněná, tak chceme vrátit „Větší než 4“, opět v uvozovkách. A pokud ani jedna podmínka splněná není, tak chceme vrátit nulu. Ukončíme závorky u funkcí a funkce potvrdíme a funkci stáhneme dolů pro všechny řádky. A na první pohled vidíme, že výsledek není správný. Na každém řádku se totiž vrátilo, že je číslo větší než 2. Proč? Pojďme se podívat na složenou funkci KDYŽ.
Excel nejprve ověřil podmínku v první funkci KDYŽ. To znamená, že na prvním řádku ověřil podmínku, že počet prodaných kusů je vyšší nebo rovno číslu dvě. Na prvním řádku máme hodnotu 2, takže je podmínka splněná. Na začátku jsme si řekli, že jakmile je podmínka vyhodnocená jako splněná, tak Excel už další podmínky neověřuje. Takže na prvním řádku máme podmínku splněnou. Na druhém řádku je počet prodaných kusů 5. Zde jsme tedy dle naší logiky chtěli vrátit text Větší než 4. Nicméně Excel opět začal vyhodnocovat podmínky a ověřil první podmínku, zda je číslo větší nebo rovno číslu 2. A jelikož hodnota 5 je vyšší než 2, tak byla první podmínka splněná, tím pádem Excel již další podmínky nevyhodnocoval. A to je důvod, proč na posloupnosti podmínek záleží. Takto Excel vyhodnotil každou podmínku na každém řádku a jelikož máme na každém řádku číslo vyšší nebo rovno 2, tak proto se n každém řádku vrátilo sousloví Větší než 2.
Aby podmínka fungovala tak, jak jsme původně chtěli, tak bychom podmínky ve funkcích KDYŽ museli otočit. Vedle ve sloupci si ukážeme správný postup. Začneme s funkcí KDYŽ, kde ověříme nejprve druhou podmínku, tedy zda je číslo na řádku vyšší nebo rovno hodnotě 4. Pokud ano, tak chceme vrátit sousloví Větší než 4. Tato podmínka hned na prvním řádku splněná nebude, takže Excel bude pokračovat druhou podmínkou KDYŽ, kde ověří podmínku, zda je číslo na řádku vyšší nebo rovno hodnotě 2, pokud ano, tak chceme vrátit Větší než 2. A pokud ani jedna podmínka splněná nebude, tak chceme vrátit nulu. Funkce ukončíme, potvrdíme a funkce stáhneme pro ostatní řádky dolů. A teď již vícenásobná podmínka KDYŽ vrací správné výsledky.
V dalším příkladu máme obdobný příklad, ale s logickou podmínkou menší než. I v tomto případě si musíte dát pozor na pořadí logických podmínek. Nejprve si ukážeme nesprávný postup. Chceme písmenem kategorie označit produkty dle počtu prodaných kusů. Napíšeme první funkci KDYŽ, kde začneme podmínkami od konce, tedy nejprve ověříme podmínku, že je počet prodaných kusů nižší nebo roven číslu 40, pokud no, tak chceme písmeno B v uvozovkách. Následuje druhá podmínka, kde ověříme, že je číslo menší nebo rovno 25, v takovém případě chceme vrátit písmeno „C“ a musíme ověřit ještě jednu podmínku, že pokud je číslo nižší nebo rovno 10, tak chceme vrátit písmeno D a pokud ani jedna podmínka splněná nebude, tak chceme vrátit písmeno A. Ukončíme funkce, funkce potvrdíme a pošleme funkci dolů. A hned vidíme, že až na číslo 41 máme všude nesprávné písmeno a je to proto, protože jsme začali podmínkou, že čísla mají být nižší než 40, což je na každém řádku splněno, kromě čísla 41, takže se další podmínky již neověřují.
Aby logické podmínky fungovali, tak musíme zvolit opačný postup. Funkce KDYŽ, kde nejprve ověříme nejnižší podmínku, že je číslo menší nebo rovno 10, pokud je podmínka splněná, tak chceme vrátit písmeno D. Druhá podmínka, kde ověříme, že je číslo menší nebo rovno než hodnota 25. Pokud ano, chceme vrátit písmeno C. Následuje třetí podmínka, pokud je číslo menší nebo rovno 40, tak chceme vrátit písmeno B. A pokud ani jedna podmínka splněná není, tak chceme vrátit písmeno A. Ukončíme funkce, potvrdíme a pošleme funkce dolů. A teď funkce vrací správně označené řádky.
Základním pravidlem u ověřování podmínek je tedy, že pokud ověřujeme hodnoty dle znaménka menší než, tak musíme začít od nejnižších hodnot, naopak pokud ověřujeme hodnoty podle znaménka větší než, tak musíme začít od nejvyšších hodnot.
Stejně tak nemůžeme podmínky ve funkcích zadávat v libovolném pořadí. I to by vrátilo nesprávné výsledky. Takže nemůžeme například nejprve ověřit podmínku menší nebo rovno 10, a následně podmínku menší nebo rovno 40 a až nakonec podmínku menší nebo rovno 25. I to by po potvrzení vrátilo na některých řádcích nesprávné výsledky.
Jedna odpověď
😊