MS Excel se obtížně odstraňuje diakritika. Na internetu je k dispozici řada hotových řešení, jak odstranit diakritiku pomocí VBA kódu. V MS Office 365 je možné použít i vzorec obsahující funkce REDUCE a LAMBDA.
Odstranění diakritiky může být oříšek. V článku je ukázka odstranění diakritiky s použitím funkcí REDUCE a LAMBDA.
Pro odstranění diakritiky by bylo (spíše asi jen teoreticky) možné použít několikanásobně funkci DOSADIT. V buňce C2 se nahradí á za a, v buňce C3 é za e a podobně. Zápis této funkce by byl DOSADIT(text; „á“; „a“) neboli DOSADIT(C1;A2;B2). Text „údolí“ se v buňce B4 změní na „údoli“ a v buňce B6 na „udoli“. Nevýhodou tohoto řešení je, že vzniká velké množství pomocných buněk (C2 až C5).
pozn. pro lepší srozumitelnost a přehlednost je v ukázce jen několik diakritických znaků á, é, í, ý, ú. Pro odstranění veškeré diakritiky bychom samozřejmě použili kompletní seznam…
Stejného výsledku je možné dosáhnout i pomocí tohoto (bohužel značně komplikovaného) zápisu:
=SCAN(C1;$A$2:$A$6;LAMBDA(text;znak;DOSADIT(text;znak;POSUN(znak;0;1))))
Vzorec obsahuje několik funkcí:
- SCAN – funkce generující dílčí mezivýsledky do buněk C2, C3, C4 atp. (údolí, údolí, údoli, …), vždy vychází z buňky o řádek výše a generuje nový výsledek.
- LAMBDA – funkce umožňující programovat vlastní funkci, LAMBDA(název_proměnné1;název_proměnné2; vlastní_vzorec) více viz LAMBDA funkce. Definuje novou (naši) funkci, která nahrazuje diakritiku, proměnné jsou text a znak, nová funkce má tvar DOSADIT(text;znak;POSUN(znak;0;1))
- DOSADIT – dosazení nového textu za starý, a místo á, é → e apod.
- POSUN – posune znak ze sloupce A na sloupec B, POSUN(znak;0;1) neboli POSUN(proměnná_znak;o_kolik_řádků;o_kolik_sloupců)
Složité?
Určitě ano. Funkce LAMBDA na ni navazující funkce jsou bohužel komplikované.
Nyní však můžeme velmi elegantně zrušit vypsání všech pomocných buněk (C2:C5) nahrazením funkce SCAN za funkci REDUCE. Ta vypíše jen výsledek – finální text bez diakritiky.
=REDUCE(J2;$A$2:$A$6;LAMBDA(text;znak;DOSADIT(text;znak;POSUN(znak;0;1))))
Funkce REDUCE bude fungovat i pro textové hodnoty uložené ve sloupci. Změní se jen adresa výchozí textové hodnoty, buňka K6.
Výsledný vzorec vypadá takto:
=REDUCE(K6;$A$2:$A$6;LAMBDA(text;znak;DOSADIT(text;znak;POSUN(znak;0;1))))
nebo obecněji
=REDUCE(původní_text_s_diakritikou; sloupec_se_znaky; LAMBDA(text;znak;DOSADIT(text;znak;POSUN(znak;0;1))))