Encyklopedie

Jak na odstranění diakritiky s pomocí funkcí REDUCE a LAMBDA

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))))