dnes je 21.12.2024

Input:

Excel 2007: Makra – VBA - Uživatelská funkce – 13. část

31.8.2012, , Zdroj: Verlag Dashöfer

V předchozích dílech jsme pokračovali v projektu, kde završujeme 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 dořešili přibližnou shodu názvu knihy, jak ji zadal uživatel. Interně jsme využili operátoru LIKE a funkce Split S jejich pomocí jsme si připravili funkci, která porovnává navrženou větu s celým seznamem vět. Dnes chceme povolit některé další „malé chyby“, jako třeba chybný člen v němčině.

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. Už jsme mu poskytli hrubé fungující řešení, ale musíme to dotáhnout do vyšší dokonalosti. Stáhněte si sešit 2012-18 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 v členu. V rámci boje za spravedlnost jsme si sami dali úkol, zavést ještě zjemnění, že v případě pouze chybného členu budeme zapsaný název také tolerovat.

Na takový úkol si musíme zpracovat nějaký plán.

Jedna možnost by byla, že slova do délky 3 znaky budeme pokládat za přibližně stejná vždy. To by pak zahrnovalo i předložky v češtině jako „na“, nebo „při“. Pak ovšem jakýkoli krátký název se vyhodnotí jako správný s knihou „Sup“. A to zase by bylo až příliš liberální.

Jiná možnost je vyjmenovat seznam tolerovaných slov, která se vypustí jak ze vzoru, tak z porovnávaného textu. Algoritmus by postupoval tak, že ve funkci Rozdel_Na_Slova bychom vložili ještě nahrazení vybraných slov mezerou. Museli bychom ovšem zajistit, aby to nezafungovalo např. na slovo „Hundes“, z něhož by to bez pečlivějšího ošetření sebralo koncové „des“. Pokud krátká slůvka obalíme před porovnáváním mezerami, tento problém nenastane. Zato by nám to nenašlo počáteční výskyty, jako

Nahrávám...
Nahrávám...