< návrat zpět

MS Excel


Téma: Challenge - Odstraňte diakritiku rss

Zaslal/a icon 11.1.2016 10:32

eLCHaTak mně dneska napadlo, jestli by to nešlo. Měl jsem chviličku a zkusil to. A jde to. Takže, jestli má někdo zájem, může to zkusit taky. ;)))

Odstranit diakritiku pomocí VBA není problém. Dokážete to ale pomocí vzorce(ů)?

1. Není možné použít VBA (a pro jistotu ani žádný jiný programovací jazyk) - pouze vzorce.
2. Je možné použít pomocné sloupce.
3. Musí být zachována velikost písmen.
4. Ostatní znaky musí zůstat tak jak jsou a na svých místech ;)
5. Není možné použít pomocné tabulky!!
6. Nelze použít řetězců (podobně jako ve VBA) něco jako "ÁČĎÉĚÍŇŘŠŤÚŮÝŽáčďéeěíňřšťúůýž"=>"ACDEEINRSTUUYZacdeeinrstuuyz". Řešení musí být obecné, abych nemusel myslet na to, jaké znaky se vyskytují.

Pro hodnoty
Čuňačina
Pišta Hufnágl
Áčka jako Béčka
Champs-Élysées
Curaçao
El Niño
smörgåstårta
tête-à-tête


bude výsledek
Cunacina
Pista Hufnagl
Acka jako Becka
Champs-Elysees
Curacao
El Nino
smorgastarta
tete-a-tete
Pokud použijete pomocné sloupce, vložte vždy přílohu.

Zaslat odpověď >

Strana:  1 2 3   další »
icon #029160
eLCHa
Přidal jsem ještě 6. podmínku, bez ní by to totiž nebyla vlastně žádná výzva a neotravoval bych vás.

Řetězce se pravda dají využít na jednoduché a spolehlivé řešení, museli byste ale vyjmenovat 100% všechny znaky.citovat
#029161
avatar
len hadam .... nebude to nieco s menenim fontu na taky ktory neobsahuje diakritiku? a potom spat?citovat
icon #029162
eLCHa
Ne to není. Ale můžete to použít, zadání to vyhovuje. Sám jsem zvědavý ;) .citovat
#029164
avatar
snažil bych se to udělat nějak přes ASCII / HTML, nejdříve každé slovo rozdělit dle jednotlivých znaků a pak ten znak vyjádřit v HTML znaku, z toho lze pak následně jednouše vyexportovat znak bez speciálního znaku; přidaná podmínka na rozmezí základních ascii znaků (málá a velká písmena, bez diakritky), se kterými se nic nedělá, je easy...

Jediné co nevím, zda se v excelu dá vyjádřit znak html kódem :-Dcitovat
icon #029197
eLCHa
Ano. Je třeba text rozdělit na jednotlivé znaky. Možná lze sestrojit nějaký maticový vzorec, ale tím jsem se nezabýval. Takže v pomocných sloupcích mám jednotlivé znaky.

1. nápověda
Dejte si do sloupce pod sebe náhodné znaky, stačí pár tak 10-15. Některé s diakritikou, některé bez, některé velké a některé malé. A pak si je seřaďte.citovat
icon #029206
avatar
jasné a následne použiť MATCH s posledným parametrom rovným 1, výsledné znaky potom spojiť do pôvodného reťazca, tentokrát už bez diakritiky

Iný spôsob riešenia ponúka vnorená funkcia SUBSTITUTE, ale počet úrovní musí odpovedať počtu znakov s diakritikou, ten presahuje možnosti počtu vnorení v jednom vzorci, čiže bolo by potrebné to urobiť minimálne na dvakrát, t.j. s jedným pomocným stĺpcom.citovat
#029227
avatar
#AL nejsem si jistý, ale dle mého názoru MATCH a SUBSTITUTE porušuje podmínku 6 - protože přesně to tyto funkce dělají, ne?citovat
icon #029228
eLCHa
V příloze je řešení, které nevyhovuje zadání. Schválně jsem tam nechal i špatné výsledky, aby bylo vidět, že i když jsem se snažil, přesto mi některé znaky unikly.
Nevyhovuje proto, že jsou použity 2 řetězce - jeden s diakritikou a jeden bez.

Dávám ji sem proto, abyste tedy nemuseli nic vytvářet a nahradili nevyhovující vzorce za vyhovující.

Mimochodem, 2. nápověda (a v podstatě řešení) by opravdu byla POZVYHLEDAT
Příloha: zip29228_odstraneni-diakritiky-2.zip (10kB, staženo 194x)
citovat
icon #029229
avatar
@ Devil: Je to možné, ale je mi to asi jedno 1 .citovat
icon #029249
eLCHa
Mno
ALovi je to jedno ;) a nikdo další se neozývá, nebudu vás tedy napínat.

Lze použít maticový vzorec:=IFERROR(ZNAK(64+POZVYHLEDAT(ČÁST($A2;B$1;1);ZNAK(ŘÁDEK($A$65:$A$90)))+KDYŽ(JE.CHYBHODN(NAJÍT(MALÁ(ČÁST($A2;B$1;1));ČÁST($A2;B$1;1)));0;32));ČÁST($A2;B$1;1))=IFERROR(CHAR(64+MATCH(MID($A2;B$1;1);CHAR(ROW($A$65:$A$90)))+IF(ISERROR(FIND(LOWER(MID($A2;B$1;1));MID($A2;B$1;1)));0;32));MID($A2;B$1;1))
nebo nematicový=IFERROR(ZNAK(KÓD("A")-1+POZVYHLEDAT(ČÁST($A2;B$1;1);{"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z"})+KDYŽ(JE.CHYBHODN(NAJÍT(MALÁ(ČÁST($A2;B$1;1));ČÁST($A2;B$1;1)));0;32));ČÁST($A2;B$1;1))=IFERROR(CHAR(CODE("A")-1+MATCH(MID($A2;B$1;1);{"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z"})+IF(ISERROR(FIND(LOWER(MID($A2;B$1;1));MID($A2;B$1;1)));0;32));MID($A2;B$1;1))

Pochopení vzorce nechám na vás ;) .
Bezpečnější je samozřejmě ten nematicový, protože ho neovlivní odstraňování/přidávání řádků.

Využití na listu, v UDF nebo procedurách. Já už od teď žádné řetězce používat nebudu ;))citovat

Strana:  1 2 3   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje