Jak odstranit speciální / nechtěné znaky v aplikaci Excel

  • Sdílet Toto
Michael Brown

V tomto článku se dozvíte, jak odstranit konkrétní znaky z textového řetězce a jak odstranit nežádoucí znaky z více buněk najednou.

Při importu dat do aplikace Excel odjinud může do vašich pracovních listů putovat celá řada speciálních znaků. Ještě nepříjemnější je, že některé znaky jsou neviditelné, což vytváří další bílé místo před, za nebo uvnitř textových řetězců. Tento návod nabízí řešení všech těchto problémů, čímž vás ušetří nutnosti procházet data buňku po buňce a čistit nežádoucí.znaky ručně.

    Odstranění speciálního znaku z buňky aplikace Excel

    Chcete-li z buňky odstranit určitý znak, nahraďte jej prázdným řetězcem pomocí funkce SUBSTITUTE v její nejjednodušší podobě:

    SUBSTITUTE( buňka , znak , "")

    Například pro odstranění otazníku z A2 je vzorec v B2 následující:

    =SUBSTITUTE(A2, "?", "")

    Chcete-li odstranit znak, který se na klávesnici nenachází, můžete jej zkopírovat/vložit do vzorce z původní buňky.

    Například zde se dozvíte, jak se zbavit obráceného otazníku:

    =SUBSTITUTE(A2, "¿", "")

    Pokud je však nechtěný znak neviditelný nebo se nezkopíruje správně, jak jej vložíte do vzorce? Jednoduše zjistěte jeho kódové číslo pomocí funkce CODE.

    V našem případě je nežádoucí znak ("¿") v buňce A2 na posledním místě, takže k získání jeho jedinečné hodnoty kódu, která je 191, použijeme kombinaci funkcí CODE a RIGHT:

    =CODE(RIGHT(A2))

    Jakmile získáte kód znaku, dosaďte do výše uvedeného obecného vzorce odpovídající funkci CHAR. Pro naši datovou sadu vypadá vzorec následovně:

    =SUBSTITUTE(A2, CHAR(191),"")

    Poznámka: Funkce SUBSTITUTE je rozlišování velkých a malých písmen , což znamená, že malá a velká písmena považuje za různé znaky. Mějte to na paměti, pokud je vaším nežádoucím znakem písmeno.

    Odstranění více znaků z řetězce

    V jednom z předchozích článků jsme se zabývali tím, jak odstranit určité znaky z řetězců v Excelu vnořením několika funkcí SUBSTITUTE do sebe. Stejný přístup lze použít k odstranění dvou nebo více nežádoucích znaků najednou:

    SUBSTITUT(SUBSTITUT(SUBSTITUT( buňka , char1 , ""), char2 , ""), char3 , "")

    Chcete-li například z textového řetězce v A2 odstranit normální vykřičníky a otazníky a také invertované vykřičníky, použijte tento vzorec:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, "!", ""), "¡", ""), "?", ""), "¿", "")

    Totéž lze provést pomocí funkce CHAR, kde 161 je kód znaku "¡" a 191 je kód znaku "¿":

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A3, "!", ""), "?", ""), CHAR(161), ""), CHAR(191), "")

    Vnořené funkce SUBSTITUTE fungují dobře pro rozumný počet znaků, ale pokud je třeba odstranit desítky znaků, vzorec se stává příliš dlouhým a obtížně zvládnutelným. Další příklad ukazuje kompaktnější a elegantnější řešení.

    Odstranění všech nežádoucích znaků najednou

    Řešení funguje pouze v aplikaci Excel pro Microsoft 365

    Jak jistě víte, Excel 365 obsahuje speciální funkci, která umožňuje vytvářet vlastní funkce, včetně těch, které počítají rekurzivně. Tato nová funkce se jmenuje LAMBDA a veškeré podrobnosti o ní najdete ve výše odkazovaném tutoriálu. Níže budu tento koncept ilustrovat na několika praktických příkladech.

    Vlastní funkce LAMBDA pro odstranit nežádoucí znaky je následující:

    =LAMBDA(string, chars, IF(chars"", RemoveChars(SUBSTITUTE(string, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1)), string)))

    Abyste mohli tuto funkci používat ve svých pracovních listech, musíte ji nejprve pojmenovat. Za tímto účelem stiskněte klávesovou zkratku Ctrl + F3 a otevřete nabídku Jméno manažera a poté definovat a Nový název tímto způsobem:

    1. V Název zadejte název funkce: RemoveChars .
    2. Nastavte obor na Pracovní sešit .
    3. V Vztahuje se na vložte výše uvedený vzorec.
    4. Volitelně zadejte popis parametrů do pole Komentáře Parametry se zobrazí při zadávání vzorce do buňky.
    5. Klikněte na OK uložit novou funkci.

    Podrobné pokyny naleznete v části Jak pojmenovat vlastní funkci LAMBDA.

    Jakmile funkce dostane název, můžete se na ni odkazovat jako na jakýkoli jiný nativní vzorec.

    Z pohledu uživatele je syntaxe naší vlastní funkce jednoduchá:

    RemoveChars(string, chars)

    Kde:

    • Řetězec - je původní řetězec nebo odkaz na buňku/oblast obsahující řetězec/řetězce.
    • Chars - znaky, které se mají odstranit. Může být reprezentován textovým řetězcem nebo odkazem na buňku.

    Pro usnadnění zadáme nežádoucí znaky do některé buňky, například D2. Pro odstranění těchto znaků z A2 použijeme vzorec:

    =RemoveChars(A2, $D$2)

    Aby vzorec fungoval správně, dbejte na následující skutečnosti:

    • V D2 jsou znaky uvedeny bez mezer, pokud si nepřejete odstranit i mezery.
    • Adresa buňky obsahující speciální znaky je uzamčena znakem $ ($D$2), aby se zabránilo změně odkazu při kopírování vzorce do následujících buněk.

    A pak jednoduše přetáhneme vzorec dolů a z buněk A2 až A6 se odstraní všechny znaky uvedené v D2:

    Chcete-li vyčistit více buněk pomocí jediného vzorce, zadejte jako 1. argument rozsah A2:A6:

    =RemoveChars(A2:A6, D2)

    Vzhledem k tomu, že vzorec se zadává pouze do nejvyšší buňky, nemusíte se starat o uzamčení souřadnic buněk - relativní odkaz (D2) v tomto případě funguje dobře. A díky podpoře dynamických polí se vzorec automaticky přelije do všech odkazovaných buněk:

    Odstranění předdefinované sady znaků

    Chcete-li odstranit předdefinovanou sadu znaků z více buněk, můžete vytvořit další LAMBDA, která volá hlavní funkci. RemoveChars a ve 2. parametru zadejte nežádoucí znaky. Například:

    Odstranění speciální znaky , jsme vytvořili vlastní funkci s názvem RemoveSpecialChars :

    =LAMBDA(string, RemoveChars(string, "?¿!¡*%#@^"))

    Na odstranit čísla z textových řetězců, jsme vytvořili ještě jednu funkci s názvem RemoveNumbers :

    =LAMBDA(string, RemoveChars(string, "0123456789"))

    Obě výše uvedené funkce se používají velmi snadno, protože vyžadují pouze jeden argument - původní řetězec.

    Odstranění speciální znaky z A2 je vzorec:

    =Odstranit speciální znaky(A2)

    Odstranění pouze číselné znaky:

    =Odstranitčísla(A2)

    Jak tato funkce funguje:

    V podstatě RemoveChars funkce prochází seznam znaky a odstraňuje jeden znak po druhém. Před každým rekurzivním voláním funkce IF zkontroluje zbývající znaky. znaky není prázdný (znaky""), funkce zavolá sama sebe. Jakmile je zpracován poslední znak, vzorec vrátí hodnotu. řetězec jeho současná podoba a výstupy.

    Podrobný rozpis vzorce naleznete v části Rekurzivní LAMBDA pro odstranění nežádoucích znaků.

    Odstranění speciálních znaků pomocí VBA

    Funkce fungují ve všech verzích aplikace Excel

    Pokud ve vašem Excelu není funkce LAMBDA k dispozici, nic vám nebrání vytvořit podobnou funkci pomocí VBA. Uživatelem definovanou funkci (UDF) lze napsat dvěma způsoby.

    Vlastní funkce pro odstranění speciálních znaků rekurzivní :

    Tento kód napodobuje logiku funkce LAMBDA popsanou výše.

    Function RemoveUnwantedChars(str As String , chars As String ) If ( "" chars) Then str = Replace(str, Left(chars, 1), "" ) chars = Right(chars, Len(chars) - 1) RemoveUnwantedChars = RemoveUnwantedChars(str, chars) Else RemoveUnwantedChars = str End If End Function

    Vlastní funkce pro odstranění speciálních znaků nerekurzivní :

    Zde procházíme nežádoucí znaky od 1 do Len(chars) a ty, které najdeme v původním řetězci, nenahradíme ničím. Funkce MID vytahuje nežádoucí znaky jeden po druhém a předává je funkci Replace.

    Funkce RemoveUnwantedChars(str As String , chars As String ) For index = 1 To Len(chars) str = Replace(str, Mid(chars, index, 1), "" ) Next RemoveUnwantedChars = str End Function

    Vložte do sešitu jeden z výše uvedených kódů, jak je vysvětleno v části Jak vložit kód VBA do aplikace Excel, a vaše vlastní funkce je připravena k použití.

    Aby se naše nová uživatelsky definovaná funkce nepletla s funkcí definovanou lambdou, pojmenovali jsme ji jinak:

    RemoveUnwantedChars(string, chars)

    Za předpokladu, že původní řetězec je v A2 a nežádoucí znaky v D2, můžeme se jich zbavit pomocí tohoto vzorce:

    = RemoveUnwantedChars(A2, $D$2)

    Vlastní funkce s pevně zadanými znaky

    Pokud se nechcete zabývat zadáváním speciálních znaků pro každý vzorec, můžete je zadat přímo v kódu:

    Function RemoveSpecialChars(str As String ) As String Dim chars As String Dim index As Long chars = "?¿!¡*%#$(){}[]^&/\~+-" For index = 1 To Len(chars) str = Replace(str, Mid(chars, index, 1), "" ) Next RemoveSpecialChars = str End Function

    Mějte na paměti, že výše uvedený kód slouží k demonstraci. Pro praktické použití nezapomeňte do následujícího řádku uvést všechny znaky, které chcete odstranit:

    chars = "?¿!¡*%#$(){}[]^&/\~+-"

    Tato vlastní funkce se jmenuje RemoveSpecialChars a vyžaduje pouze jeden argument - původní řetězec:

    RemoveSpecialChars(řetězec)

    Pro odstranění speciálních znaků z našeho souboru dat se použije následující vzorec:

    =Odstranit speciální znaky(A2)

    Odstranění netisknutelných znaků v aplikaci Excel

    Microsoft Excel má speciální funkci pro odstranění netisknutelných znaků - funkci CLEAN. Technicky vzato odstraňuje prvních 32 znaků v 7bitové sadě ASCII (kódy 0 až 31).

    Chcete-li například odstranit netisknutelné znaky z A2, zde je vzorec pro použití:

    =CLEAN(A2)

    Tím se odstraní netisknutelné znaky, ale mezery před/za textem a mezi slovy zůstanou zachovány.

    Zbavit se další místa , zabalte vzorec CLEAN do funkce TRIM:

    =TRIM(CLEAN(A2))

    Nyní jsou odstraněny všechny počáteční a koncové mezery a mezery mezi nimi jsou redukovány na jeden znak mezery:

    Pokud chcete odstranit absolutně všechny prostory uvnitř řetězce, pak navíc nahradí znak mezery (kódové číslo 32) prázdným řetězcem:

    =TRIM(CLEAN((SUBSTITUTE(A2, CHAR(32), ""))))

    Zůstávají v pracovním listu některé mezery nebo jiné neviditelné znaky? To znamená, že tyto znaky mají v sadě znaků Unicode jiné hodnoty.

    Například kód znaku nezalomitelná mezera ( ) je 160 a můžete ji vyčistit podle tohoto vzorce:

    =SUBSTITUTE(A2, CHAR(160)," ")

    Vymazání specifický netisknutelný znak , musíte nejprve zjistit jeho kódovou hodnotu. Podrobný návod a příklady vzorců najdete zde: Jak odstranit konkrétní netisknutelný znak.

    Odstranění speciálních znaků pomocí sady Ultimate Suite

    Podpora aplikace Excel pro Microsoft 365, Excel 2019 - 2010

    V tomto posledním příkladu vám ukážu nejjednodušší způsob, jak odstranit speciální znaky v aplikaci Excel. S nainstalovanou sadou Ultimate Suite je třeba udělat toto:

    1. Na Data Ablebits na kartě Text klikněte na tlačítko Odstranění adresy > Odstranění znaků .

  • V podokně doplňku vyberte zdrojový rozsah, vyberte možnost Odstranění znakových sad a vyberte požadovanou možnost z rozevíracího seznamu ( Symboly a interpunkční znaménka v tomto příkladu).
  • Stiskněte tlačítko Odstranění adresy tlačítko.
  • Za chvíli získáte dokonalý výsledek:

    Pokud se něco pokazí, nemusíte se obávat - záložní kopie pracovního listu se vytvoří automaticky jako Zálohujte tento pracovní list je ve výchozím nastavení zaškrtnuto políčko .

    Jste zvědaví, zda si vyzkoušíte náš nástroj Odstranit? Odkaz na zkušební verzi naleznete níže. Děkuji vám za přečtení a doufám, že se příští týden uvidíme na našem blogu!

    Dostupné soubory ke stažení

    Odstranění speciálních znaků - příklady (.xlsm soubor)

    Ultimate Suite - zkušební verze (.exe soubor)

    Michael Brown je oddaný technologický nadšenec s vášní pro zjednodušování složitých procesů pomocí softwarových nástrojů. S více než desetiletými zkušenostmi v technologickém průmyslu zdokonalil své dovednosti v aplikacích Microsoft Excel a Outlook a také v Tabulkách a Dokumentech Google. Michaelův blog je věnován sdílení jeho znalostí a odborných znalostí s ostatními a poskytuje snadno pochopitelné tipy a návody pro zlepšení produktivity a efektivity. Ať už jste zkušený profesionál nebo začátečník, Michaelův blog nabízí cenné postřehy a praktické rady, jak tyto základní softwarové nástroje co nejlépe využít.