V předchozích dílech jsme pokračovali v projektu, kde postupně zdokonalujeme práci s uživatelskými funkcemi. Když vám v Excelu nějaká funkce chybí, budete si umět poradit skoro se vším. Minule jsme v pokročilém provedení upravovali funkci Zodiac1, která vyhodnocuje vztah uchazeče k znamením zvěrokruhu, jak předseda klubu požadoval. Funkce nám totiž při ladění vracela nesprávný výsledek na hranici znamení. Jako příčina se odhalilo národní prostředí – formátování data. Dnes zaměříme svou pozornost na další položku v přihlášce.
Podkladová úloha: Pracujeme se sešitem, v němž je formulář, jejž je třeba vyplňovat. Nedávno nás předseda klubu překvapil požadavkem, že chce posuzovat znalost Kafkových děl, která uchazeč četl. Stáhněte si sešit 2012-15 UD-funkce.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:
Jak vidíte na obrázku, uživatel třeba knihu četl, ale při zápisu jejího názvu udělal překlep, nebo si název trochu spletl. Takové chybky předseda toleruje. Naopak knihy, které napsal někdo zcela jiný, nebo např. název pouhé Kafkovy povídky, která však není knihou, chce vyhodnotit jako problém v uznání členství.
My jsme tedy postaveni před úkol ověřovat název, který uchazeč zapsal, v nějakém seznamu, ale přitom tolerovat menší chyby. Nejprve si musíme stanovit, co budeme rozumět menší chybou. Připustíme, že slovo, které uchazeč zapsal s jedním písmenem jiným, než měl, budeme ještě tolerovat. Například slovo „Gracchus“ budeme tolerovat, pokud v něm bude jedno písmeno chybět, jak uchazeč zapsal „Grachus“, případně pokud bude zaměněno jiným písmenem, např. „Grakchus“.
K řešení problému využijeme porovnávací operátor ve VBA LIKE. Nejprve se seznámíme s jeho činností ve zjednodušeném použití. Pro významnou odlišnost problému, a rovněž z důvodu určité ochrany funkčnosti založíme pro práci s operátorem LIKE samostatný modul ve VBA MD_like:
Podíváme se do nápovědy k uvedenému operátoru:
Je dost důležité s tímto nastavením „šetřit“. Má platnost jen v modulu, kde je nastaven, a pokud by někdo překopíroval funkci s LIKE operátorem do jiného modulu, kde to nastaveno nebude, začne se funkce chovat jinak. A jak známo, „na lepší se snadno zvyká“, takže pokud si tento operátor začneme nastavovat u všech modulů, abychom na něj snad nezapomněli, způsobíme si na oplátku značné zpomalení některých procesů. Přidáme tedy do našeho modulu Option:
Když nyní máme v rukou základní…