KDYŽ se řekne Excelu (1)

Z úvodních lekcí Excelu byste měli vědět, že jedním z typů hodnot, které se mohou objevit v buňkách, jsou pravdivostní hodnoty PRAVDA (anglicky True), resp. NEPRAVDA (nikoli LEŽ, anglicky False). Obě pochází z tzv. booleovské logiky (algebry), jsou běžně v buňkách zarovnány na střed a Excel je v seznamech řadí na konec. V elektrotechnice představují stavy zapnuto a vypnuto, v případě počítačů pak stavy bitů 1 (True) a 0 (False), což je i jejich matematické vyjádření často využívané v nejrůznějších podmíněných výpočtech.

Pozn č. 1: Matematickým ekvivalentem pro pravdivostní hodnotu True je ve Visual Basicu -1 (autora bych škrtil a topil).

Pravdivostní hodnoty jsou výsledkem nějakého tvrzení (výroku):
„Sedm a pět je třináct“
„Číslo v buňce A1 je větší než tři.“
„Venku dnes svítí sluníčko.“
„Jmenuji se James Bond.“

Asi chápete, že výroky musí být postavené tak, aby bylo možné je vyhodnotit pouze „ano, je to pravda“ a „ne, není to pravda“. V booleovské logice neexistuje stav „nevím“. To bychom se museli poohlédnout po tzv. fuzzy logice.

Výroky v podstatě testujeme nějaký stav a na jejich základě se rozhodujeme, co dál (větvíme výpočet). Učebnice Excelu v tomto místě čtení pokračují funkcí KDYŽ, nicméně považuji za důležité ještě předtím něco zmínit (viz článek Není rovná se jako rovná se).

Rovná se jako operátor přiřazení
Rovná se jako operátor přiřazení

Klasický výklad zápisu z obrázku říká, že znakem rovná se říkáme Excelu „začínám psát vzorec“. Já bych upřesnil, že tímto symbolem PŘIŘAZUJEME hodnotu do buňky vzorcem. Jinými slovy, jedná se v tomto případě o operátor přiřazení. A teď se podívejte na další vzoreček.

Rovná se jako operátor přiřazení a komparační operátor
Rovná se jako operátor přiřazení a komparační operátor

Zatímco první „rovná se“ plní úlohu přiřazení výsledku vzorce do buňky, v níž je aplikován, druhé zde zastupuje tzv. srovnávací (porovnávací, komparační) operátor. Jinými slovy, do buňky bude navrácen výsledek testu (výroku) B2=3, tj. PRAVDA nebo NEPRAVDA.

Tip č. 1: Pokud cítíte ve snaze porozumět vzorci jakýsi blok, zakryjte si první „rovná se“.

Výroky nemusí obsahovat jen test rovnosti. Můžete využít další operátory (>, < , >=, < = a <> pro test nerovnosti, jíž můžeme slovně definovat jako „různé od …“, „vše kromě …“).

A2>=6
B5<>„Liberec“

Tip č. 2: Symboly větší a menší najdete pod klávesami čárky a tečky a jejich snadné vložení zajistí současný stisk s pravou klávesou ALT.

Jako bych slyšel vaše „a k čemu je to dobré“. Mou odpovědí je sestavování vlastního vzorce pro podmíněné formátování a do budoucna i třeba programování ve VBA.

Význam logických hodnot v podmíněném formátování
Význam logických hodnot v podmíněném formátování

A nyní tedy už milovaná i nenáviděná funkce KDYŽ. V základu na ní není nic složitého. Jako první parametr očekává výrok. Je-li jeho výsledkem PRAVDA, bude vrácena hodnota či výsledek vzorce uvedené na místě druhého parametru, pokud ne, pak se uplatní hodnota či výsledek vzorce na místě třetího parametru). Zde je několik příkladů.

Základní užití funkce KDYŽ
Základní užití funkce KDYŽ

Následují alespoň dvě ukázky výroků s využitím dalších funkcí (sami si vyzkoušejte první z výroků nasadit v podmíněném formátování).

Výroky využívající dalších funkcí
Výroky využívající dalších funkcí

Funkce KDYŽ představuje jakousi křižovatku tvaru „Y“, tj. umožňuje se dál ubírat jednou ze dvou cest. V programovém kódu je ekvivalentem větvení If..Then (česky jestliže-pak). Co když je ale rozhodování složitější a my očekáváme třeba vyhodnocení čísla jako podprůměr, průměr a nadprůměr? To je situace, kdy se rodí nenávist k této funkci, protože ji musíme leckdy složitě a nepřehledně vnořovat do jiné funkce KDYŽ. Zatímco v programovacím jazyce máme k dispozici klauzuli Select..Case (na If..Then..ElseIf raději zapomeňte), na listu žádná lepší funkce než KDYŽ není.

Vnořená funkce KDYŽ
Vnořená funkce KDYŽ

Tip č. 3: Než se pustíte do sestavování vzorce, nakreslete si „vývoják“. Dávejte si pozor na to, abyste pokryly všechny stavy a třeba na číselné ose postupujte vždy zleva doprava.
Tip č. 4: Řádek vzorců umožňuje části vzorců odsazovat (mezerami, i když to je tfujtajbl) a také ručně zalamovat (známá klávesová zkratka ALT+ENTER), takže si můžete vizuálně odsadit jednotlivé větve.

Zalamování částí vzorce (ALT+ENTER)
Zalamování částí vzorce (ALT+ENTER)

Při více jak třístavovém vyhodnocování vstupu doporučuji opustit funkci KDYŽ a její vnořování (maximem bylo dříve sedm vnoření, dnes již tento limit padl). Je-li to možné, použijte tabulku a vyhledávání (SVYHLEDAT, INDEX, POZVYHLEDAT). Tabulka přitom nemusí nutně ležet na listu (ve vzorci je možné uvést maticovou konstantu, ať už přímo či pod definovaným názvem). Některé úlohy lze vyřešit také chytrými algoritmy a jinými funkcemi.

Náhrady za funkci KDYŽ
Náhrady za funkci KDYŽ

Za povšimnutí stojí přinejmenším funkce ZVOLIT. Je jakýmsi protipólem funkce POZVYHLEDAT. Na místě prvního parametru očekává index (pořadové číslo) a vrací položku na dané pozici z uvedeného výčtu. Může tak vracet třeba názvy dnů týdne či měsíců uvedených ve výčtu a to na základě indexu (3 … „březen“ uvedený jako třetí textový řetězec v seznamu).

A nakonec se podívejme na pokročilejší techniky obcházení funkce KDYŽ.

Pokročilé nahrazování funkce KDYŽ
Pokročilé nahrazování funkce KDYŽ

Zde si rozebereme alespoň první z uvedených vzorců. Funkce ZVOLIT očekává na místě prvního parametru kladná přirozená čísla 1, 2, 3, … O funkci SIGN víme, že vrací posloupnost tří hodnot -1, 0 a 1 pro záporná čísla, nulu a kladná čísla. Vzájemnou polohu bodů X a A definuje jejich rozdíl, resp. znaménko tohoto rozdílu. No a když k výsledkům -1, 0 a 1 aplikované funkce SIGN připočteme dvojku, dostáváme se k hodnotám 1, 2, 3 pro funkci ZVOLIT a slovnímu vyhodnocení stavu.

Převod PRAVDA/NEPRAVDA na 1/0 a naopak

K převodu pravdivostních hodnot PRAVDA/NEPRAVDA na 1/0 můžeme použít techniku přenásobení jedničkou, funkci N() nebo třeba kouzelníky oblíbenou dvojici znaků „minus“, která neznačí nic víc než (-1)*(-1). Jejich užití je vlastně škodolibé a ne až tak efektivní (má význam v maticovém počtu a u funkce SOUČIN.SKALÁRNÍ). Opačnou úlohu vyřešíme například užitím funkce A().

Převod pravdivostních hodnot
Převod pravdivostních hodnot

Pozn. č. 2: Databáze zpravidla neumí datový typ True/False, pracují s 1/0 a Excel (MS Query, MS Jet) podle mých pokusů nemá konverzní nástroj při importu takových dat na True/False.
Pozn. č. 3: Excel obsahuje i funkce PRAVDA() a NEPRAVDA(), ale zkrátka ty nás nemusí zajímat.

V dnešním článku jsme používali jednoduché testy, příště se podíváme na složitější výroky a zabrousíme hlouběji do booleovské algebry.