Jak odstranit text nebo čísla z buňky aplikace Excel

  • Sdílet Toto
Michael Brown

V tomto kurzu se naučíte, jak v aplikaci Excel oddělit text od čísel pomocí nativních vzorců a vlastních funkcí. Dozvíte se také, jak rozdělit text a čísla do dvou samostatných sloupců.

Představte si následující situaci: obdržíte nezpracovaná data k analýze a zjistíte, že v jednom sloupci se mísí čísla s textem. Ve většině situací bude jistě vhodnější mít je v samostatných sloupcích pro bližší zkoumání.

V případě, že pracujete s homogenními daty, mohli byste pravděpodobně použít funkce LEFT, RIGHT a MID k extrakci stejného počtu znaků ze stejné pozice. To je však ideální scénář pro laboratorní testy. V reálném životě se s největší pravděpodobností setkáte s různorodými daty, kde čísla přicházejí před text, za text nebo mezi text. Níže uvedené příklady poskytují řešení právě pro tyto případy.případ.

    Jak odstranit text a zachovat čísla v buňkách aplikace Excel

    Řešení funguje v aplikacích Excel 365, Excel 2021 a Excel 2019.

    Aplikace Microsoft Excel 2019 zavedla několik nových funkcí, které v dřívějších verzích nebyly k dispozici, a my se chystáme jednu z nich, konkrétně funkci TEXTJOIN, použít k odstranění textových znaků z buňky obsahující čísla.

    Obecný vzorec je:

    TEXTJOIN("", TRUE, IFERROR(MID( buňka , ROW(INDIRECT("1:"&LEN( buňka ))), 1) *1, ""))

    V aplikacích Excel 365 a 2021 bude fungovat i tato aplikace:

    TEXTJOIN("", TRUE, IFERROR(MID( buňka , SEKVENCE(LEN( buňka )), 1) *1, ""))

    Na první pohled mohou vzorce vypadat trochu děsivě, ale fungují :)

    Chcete-li například odstranit text z čísel v A2, zadejte do B2 jeden z níže uvedených vzorců a poté jej zkopírujte do libovolného počtu buněk.

    V aplikaci Excel 365 - 2019:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1, "")))

    V aplikaci Excel 2019 se musí zadat jako vzorec pole pomocí kláves Ctrl + Shift + Enter . V aplikaci Excel s dynamickým polem funguje jako běžný vzorec doplněný klávesou Enter.

    V aplikaci Excel 365 a 2021:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))

    Výsledkem je odstranění všech textových znaků z buňky a zachování čísel:

    Jak tento vzorec funguje:

    Pro lepší pochopení logiky začněme zkoumat vzorec zevnitř:

    Pomocí ROW(INDIRECT("1:"&LEN(string))) nebo SEQUENCE(LEN(string)) vytvoříte posloupnost čísel odpovídající celkovému počtu znaků ve zdrojovém řetězci a poté tato pořadová čísla zadáte funkci MID jako počáteční čísla. V jazyce B2 vypadá tato část vzorce takto:

    MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)

    Funkce MID extrahuje jednotlivé znaky z A2 počínaje prvním a vrací je jako pole:

    {"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}

    Toto pole se násobí 1. Číselné hodnoty přežijí beze změny, zatímco násobení nečíselným znakem vede k chybě #VALUE!:

    {2;1;0;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!}

    Funkce IFERROR tyto chyby zpracovává a nahrazuje je prázdnými řetězci:

    {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}

    Toto výsledné pole je předáno funkci TEXTJOIN, která spojí neprázdné hodnoty v poli ( ignore_empty argument nastaven na TRUE) s použitím prázdného řetězce ("") jako oddělovače:

    TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})

    Tip: Pro Excel 2016 - 2007 existuje také řešení, ale vzorec je mnohem složitější. Najdete ho v tomto návodu: Jak extrahovat čísla v Excelu.

    Vlastní funkce pro odstranění textu z čísel

    Řešení funguje pro všechny verze aplikace Excel

    Pokud používáte starší verzi aplikace Excel nebo se vám výše uvedené vzorce zdají příliš složité na zapamatování, nic vám nebrání vytvořit si vlastní funkci s jednodušší syntaxí a uživatelsky přívětivým názvem, např. RemoveText . Uživatelem definovanou funkci (UDF) lze zapsat dvěma způsoby:

    Kód VBA 1:

    Zde se postupně podíváme na každý znak ve zdrojovém řetězci a zkontrolujeme, zda je číselný, nebo ne. Pokud je číselný, znak se přidá do výsledného řetězce.

    Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End Function

    Kód VBA 2:

    Kód vytvoří objekt pro zpracování regulárního výrazu. Pomocí RegExp odstraníme ze zdrojového řetězce všechny znaky kromě číslic 0-9.

    Function RemoveText(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End Function

    Na malých listech budou oba kódy fungovat stejně dobře. Na velkých listech, kde je funkce volána stokrát nebo tisíckrát, bude kód 2, který používá VBScript.RegExp, pracovat rychleji.

    Podrobný postup pro vložení kódu do sešitu naleznete zde: Jak vložit kód VBA do aplikace Excel.

    Ať už zvolíte jakýkoli přístup, z pohledu koncového uživatele je funkce pro odstranění textu a ponechání čísel stejně jednoduchá:

    RemoveText(řetězec)

    Například pro odstranění nečíselných znaků z buňky A2 je vzorec v buňce B2 následující:

    =Odstranit text(A2)

    Stačí jej zkopírovat dolů do sloupce a získáte tento výsledek:

    Poznámka: Jak nativní vzorce, tak vlastní funkce vypisují a číselný řetězec . Chcete-li z něj udělat číslo, vynásobte výsledek číslem 1 nebo přičtěte nulu, případně vzorec obalte funkcí VALUE. Např:

    =RemoveText(A2) + 0

    =VALUE(RemoveText(A2))

    Jak odstranit čísla z textového řetězce v aplikaci Excel

    Řešení funguje v aplikacích Excel 365, Excel 2021 a Excel 2019.

    Vzorce pro odstranění čísel z alfanumerického řetězce jsou do značné míry podobné vzorcům popsaným v předchozím příkladu.

    Pro Excel 365 - 2019:

    TEXTJOIN("", TRUE, IF(ISERR(MID( buňka , ROW(INDIRECT("1:"&LEN( buňka ) )), 1) *1), MID( buňka , ROW(INDIRECT("1:"&LEN( buňka ))), 1), ""))

    V aplikaci Excel 2019 nezapomeňte vytvořit vzorec pole stisknutím kombinace kláves Ctrl + Shift + Enter.

    Pro aplikace Excel 365 a 2021:

    TEXTJOIN("", TRUE, IF(ISERROR(MID( buňka , SEKVENCE(LEN( buňka 1) *1), MID( buňka , SEKVENCE(LEN( buňka )), 1), ""))

    Například pro odstranění čísel z řetězce v A2 je vzorec následující:

    =TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), "")))

    Nebo

    =TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))

    Výsledkem je odstranění všech čísel z buňky a zachování textových znaků:

    Jak je vidět na obrázku výše, vzorec odstraňuje číselné znaky z libovolné pozice v řetězci: na začátku, na konci a uprostřed. Je zde však výhrada: pokud řetězec začíná číslem, za kterým následuje mezera , je tato mezera zachována, což způsobuje problém s počátečními mezerami (jako v B2).

    Chcete-li se zbavit dalších mezery před textem , zabalte vzorec do funkce TRIM takto:

    =TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))))

    Nyní jsou vaše výsledky naprosto dokonalé!

    Jak tento vzorec funguje:

    Vzorec funguje v podstatě stejně, jak bylo vysvětleno v předchozím příkladu. Rozdíl je v tom, že z výsledného pole podaného funkci TEXTJOIN je třeba odstranit čísla, nikoliv text. Abychom to měli hotové, použijeme kombinaci funkcí IF a ISERROR.

    Jak si pamatujete, MID(...)+0 generuje pole čísel a chyb #VALUE!, které představují textové znaky na stejných pozicích:

    {2;1;0;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!}

    Funkce ISERROR zachytí chyby a výsledné pole logických hodnot předá funkci IF:

    {FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}

    Když funkce IF vidí TRUE (chybu), vloží pomocí další funkce MID do zpracovávaného pole příslušný textový znak. Když funkce IF vidí FALSE (číslo), nahradí ho prázdným řetězcem:

    {"";"";"";"" "; "S"; "u"; "n"; "s"; "e"; "t";"" "; "R"; "o"; "a"; "d"}

    Toto konečné pole se předá TEXTJOIN, který spojí textové znaky a vypíše výsledek.

    Vlastní funkce pro odstranění čísel z textu

    Řešení funguje pro všechny verze aplikace Excel

    Vzhledem k tomu, že robustní vzorec by měl být jednoduchý, podělím se s vámi o kód uživatelsky definované funkce (UDF), která odstraňuje všechny číselné znaky.

    Kód VBA 1:

    Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End Function

    Kód VBA 2:

    Function RemoveNumbers(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End Function

    Stejně jako v případě funkce RemoveText je druhý kód vhodnější použít ve velkých pracovních listech, aby se optimalizoval výkon.

    Po přidání kódu do sešitu můžete pomocí této vlastní funkce odstranit z buňky všechny číselné znaky:

    RemoveNumbers(řetězec)

    V našem případě je vzorec v B2 následující:

    =Odstranitčísla(A2)

    Chcete-li oříznout případné počáteční mezery, vnořte vlastní funkci dovnitř TRIM stejně jako v případě nativního vzorce:

    =TRIM(RemoveNumbers(A2))

    Rozdělení čísel a textu do samostatných sloupců

    V situaci, kdy chcete rozdělit text a čísla do dvou sloupců, by bylo dobré mít tuto práci hotovou pomocí jediného vzorce, souhlasíte? Pro tento účel stačí sloučit kód vzorce RemoveText a RemoveNumbers do jedné funkce s názvem SplitTextNumbers nebo jednoduše Split nebo cokoli jiného :)

    Kód VBA 1:

    Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum &; sCurChar Else sText = sText &; sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End EndFunkce

    Kód VBA 2:

    Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ("VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End Function

    Naše nová vlastní funkce vyžaduje dva argumenty:

    SplitTextNumbers(string, is_remove_text)

    Kde: is_remove_text je logická hodnota určující, které znaky mají být odstraněny:

    • TRUE nebo 1 - odstranění textu a zachování čísel
    • FALSE nebo 0 - odstranění čísel a zachování textu

    Pro náš vzorový soubor dat mají vzorce tento tvar:

    Odstranění nečíselných znaků:

    =SplitTextNumbers(A2, TRUE)

    Odstranění číselných znaků:

    =SplitTextNumbers(A2, FALSE)

    Tip: Abyste se vyhnuli možnému problému s počátečními mezerami, doporučuji vzorec, který odstraňuje čísla, vždy obalit funkcí TRIM:

    =TRIM(SplitTextNumbers(A2, FALSE))

    Speciální nástroj pro odstranění čísel nebo textu

    Těm, kteří si neradi zbytečně komplikují práci, ukážu náš vlastní způsob odstraňování textu nebo čísel v Excelu.

    Za předpokladu, že je naše sada Ultimate Suite přidána na pás karet aplikace Excel, provedete následující kroky:

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

  • V podokně doplňku vyberte zdrojový rozsah, zvolte možnost Odstranění znakových sad a vyberte možnost Text znaky nebo Číselné znaky v rozevíracím seznamu.
  • Hit Odstranění adresy a užijte si výsledek :)
  • Tip: Pokud výsledky obsahují mezery, nástroj Trim Spaces je rychle odstraní.

    To je návod, jak odstranit textové nebo číselné znaky z řetězce v aplikaci Excel. Děkuji vám za přečtení a těším se na vás na našem blogu příští týden!

    Dostupné soubory ke stažení

    Odstranění textu nebo čísel v aplikaci Excel - 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.