V předchozích dílech jsme pokračovali v projektu, kde dále 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 pokročili s kontrolou přibližné shody názvu knihy, jak ji zadal uživatel. Pomocí funkce Split jsme si připravili funkci, která rozdělí větu do jednotlivých slov. Dnes budeme slova z názvů porovnávat „až na malou chybu“.
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-17 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 menší chybu. Takové chybky předseda toleruje, ale naše funkce JeJako ji vyhodnotila jako špatně, protože posuzovala celý text názvu, a v něm byl více než 1 znak špatně. Musíme zavést jemnější kritérium shody. Pokud má název více slov než 2 a nadpoloviční většina slov je vyhodnocena jako přibližné správně napsaná, budeme zapsaný název tolerovat.
Vypadá to, že nově sestrojená funkce Jsou_Vety_Podobne funguje na zvoleném příkladě. Zbývá tedy zapojit do hry prohlížení celého seznamu Kafkových děl, jak je máme z minula uloženy na utajeném listě. Uživatel by pravděpodobně napsal názvy knih v jiném pořadí, než je vedeme v našem seznamu. Proto musíme o každém z názvů, které uživatel zapíše, předpokládat, že by v seznamu děl mohl být. Sestrojíme funkci, která bude k uživatelem danému názvu procházet celý seznam.
Zatím nebudeme list s názvy knih utajovat, aby se nám ladění nekomplikovalo. Musíme si upřesnit přípustné chyby. Pokud má název jen 2 slova, smí být v každém z nich jedna chyba v rozdílu jednoho písmene. Tedy ve funkci Jsou_Vety_Podobne tak, jakjsme s ní pracovali minule, musíme upravit instrukci:
Slov_Vzoru = UBound(VetaVzor) + 1
Tím si uvědomíme častou chybku při práci s indexy začínajícími od 0. Pokud bychom výše provedenou úpravu neprovedli, pak to v téže…