Obsah
Tento návod vás naučí, ako oddeliť text od čísel v programe Excel pomocou vlastných vzorcov a vlastných funkcií. Naučíte sa tiež, ako rozdeliť text a čísla do dvoch samostatných stĺpcov.
Predstavte si to takto: dostanete nespracované údaje na analýzu a zistíte, že čísla sú zmiešané s textom v jednom stĺpci. Vo väčšine situácií bude určite vhodnejšie mať ich v samostatných stĺpcoch na bližšie preskúmanie.
V prípade, že pracujete s homogénnymi údajmi, pravdepodobne by ste mohli použiť funkcie LEFT, RIGHT a MID na extrakciu rovnakého počtu znakov z rovnakej pozície. To je však ideálny scenár pre laboratórne testy. V reálnom živote budete s najväčšou pravdepodobnosťou pracovať s rozdielnymi údajmi, kde sa čísla nachádzajú pred textom, za textom alebo medzi textom. Nižšie uvedené príklady poskytujú riešenia presne pre tento prípadprípad.
Ako odstrániť text a zachovať čísla v bunkách aplikácie Excel
Riešenie funguje v aplikáciách Excel 365, Excel 2021 a Excel 2019
Microsoft Excel 2019 zaviedol niekoľko nových funkcií, ktoré nie sú dostupné v predchádzajúcich verziách, a my použijeme jednu z takýchto funkcií, konkrétne TEXTJOIN, na odstránenie textových znakov z bunky obsahujúcej čísla.
Všeobecný vzorec je:
TEXTJOIN("", TRUE, IFERROR(MID( bunka , ROW(INDIRECT("1:"&LEN( bunka ))), 1) *1, ""))V aplikáciách Excel 365 a 2021 bude fungovať aj táto aplikácia:
TEXTJOIN("", TRUE, IFERROR(MID( bunka , SEKVENCIA(LEN( bunka )), 1) *1, ""))Na prvý pohľad môžu vzorce vyzerať trochu odstrašujúco, ale fungujú :)
Ak chcete napríklad odstrániť text z čísel v A2, zadajte jeden z nasledujúcich vzorcov do B2 a potom ho skopírujte do toľkých buniek, koľko potrebujete.
V programe Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1, ""))
V programe Excel 2019 sa musí zadať ako vzorec poľa pomocou klávesovej skratky Ctrl + Shift + Enter . V programe Excel s dynamickým poľom funguje ako bežný vzorec doplnený klávesom Enter.
V aplikáciách Excel 365 a 2021:
=TEXTJOIN(", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Výsledkom je odstránenie všetkých textových znakov z bunky a zachovanie čísel:
Ako tento vzorec funguje:
Aby sme lepšie pochopili logiku, začnime skúmať vzorec zvnútra:
Pomocou ROW(INDIRECT("1:"&LEN(string))) alebo SEQUENCE(LEN(string)) vytvoríte postupnosť čísel zodpovedajúcu celkovému počtu znakov v zdrojovom reťazci a potom tieto postupné čísla zadáte do funkcie MID ako počiatočné čísla. V jazyku B2 vyzerá táto časť vzorca takto:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Funkcia MID vyberie každý znak z A2 počnúc prvým a vráti ho ako pole:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Toto pole sa vynásobí číslom 1. Číselné hodnoty prežijú bez zmeny, zatiaľ čo vynásobenie nečíselného znaku vedie k chybe #VALUE!:
{2;1;0;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!}
Funkcia IFERROR tieto chyby spracuje a nahradí ich prázdnymi reťazcami:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Toto výsledné pole sa doručí funkcii TEXTJOIN, ktorá spojí neprázdne hodnoty v poli ( ignore_empty argument je nastavený na TRUE), pričom ako oddeľovač sa použije prázdny reťazec (""):
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Tip. Pre Excel 2016 - 2007 tiež existuje riešenie, ale vzorec je oveľa zložitejší. Nájdete ho v tomto návode: Ako extrahovať čísla v programe Excel.
Vlastná funkcia na odstránenie textu z čísel
Riešenie funguje pre všetky verzie aplikácie Excel
Ak používate staršiu verziu programu Excel alebo sa vám uvedené vzorce zdajú príliš zložité na zapamätanie, nič vám nebráni vytvoriť si vlastnú funkciu s jednoduchšou syntaxou a používateľsky prívetivým názvom, napr. RemoveText Používateľom definovanú funkciu (UDF) možno zapísať dvoma spôsobmi:
Kód VBA 1:
Tu sa postupne pozrieme na každý znak zdrojového reťazca a skontrolujeme, či je číselný alebo nie. Ak je číselný, znak sa pridá do výsledného reťazca.
Funkcia 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 FunctionKód VBA 2:
Kód vytvára objekt na spracovanie regulárneho výrazu. Pomocou RegExp odstránime zo zdrojového reťazca všetky znaky okrem čí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 FunctionNa malých pracovných hárkoch budú oba kódy fungovať rovnako dobre. Na veľkých pracovných hárkoch, kde sa funkcia volá stovky alebo tisíce krát, bude kód 2, ktorý používa VBScript.RegExp, pracovať rýchlejšie.
Podrobný postup vloženia kódu do zošita nájdete tu: Ako vložiť kód VBA do programu Excel.
Nech už si vyberiete akýkoľvek prístup, z pohľadu koncového používateľa je funkcia na odstránenie textu a ponechanie čísel rovnako jednoduchá:
RemoveText(reťazec)Napríklad na odstránenie nečíselných znakov z bunky A2 je vzorec v bunke B2 nasledovný:
=RemoveText(A2)
Stačí ho skopírovať do stĺpca a dostanete tento výsledok:
Poznámka: Vlastné vzorce aj vlastné funkcie majú výstup a číselný reťazec . Ak chcete vzorec premeniť na číslo, vynásobte výsledok číslom 1 alebo pridajte nulu, prípadne vzorec zabaľte do funkcie VALUE. Napríklad:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Ako odstrániť čísla z textového reťazca v programe Excel
Riešenie funguje v aplikáciách Excel 365, Excel 2021 a Excel 2019
Vzorce na odstránenie číslic z alfanumerického reťazca sú veľmi podobné tým, ktoré boli uvedené v predchádzajúcom príklade.
Pre Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( bunka , ROW(INDIRECT("1:"&LEN( bunka ) )), 1) *1), MID( bunka , ROW(INDIRECT("1:"&LEN( bunka ))), 1), ""))V programe Excel 2019 nezabudnite vytvoriť vzorec poľa stlačením klávesov Ctrl + Shift + Enter súčasne.
Pre aplikácie Excel 365 a 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( bunka , SEKVENCIA(LEN( bunka 1) *1), MID( bunka , SEKVENCIA(LEN( bunka )), 1), ""))Ak chcete napríklad odstrániť čísla z reťazca v A2, vzorec je:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Alebo
=TEXTJOIN(", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
Výsledkom je, že z bunky sa odstránia všetky čísla a textové znaky sa zachovajú:
Ako je znázornené na obrázku vyššie, vzorec odstraňuje číselné znaky z ľubovoľnej pozície v reťazci: na začiatku, na konci a v strede. začína číslom, za ktorým nasleduje medzera , táto medzera sa zachováva, čo spôsobuje problém vedúcich medzier (ako v B2).
Ak sa chcete zbaviť ďalších medzery pred textom , zabalte vzorec do funkcie TRIM takto:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))
Teraz sú vaše výsledky úplne dokonalé!
Ako tento vzorec funguje:
Vzorec v podstate funguje rovnako, ako bolo vysvetlené v predchádzajúcom príklade. Rozdiel je v tom, že z konečného poľa podávaného funkcii TEXTJOIN je potrebné odstrániť čísla, nie text. Aby sme to mali hotové, použijeme kombináciu funkcií IF a ISERROR.
Ako si pamätáte, MID(...)+0 generuje pole čísel a chýb #VALUE!, ktoré predstavujú textové znaky na rovnakých pozíciách:
{2;1;0;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!}
Funkcia ISERROR zachytí chyby a výsledné pole logických hodnôt odovzdá funkcii IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Keď funkcia IF vidí TRUE (chybu), vloží pomocou ďalšej funkcie MID do spracúvaného poľa príslušný textový znak. Keď funkcia IF vidí FALSE (číslo), nahradí ho prázdnym reťazcom:
{"";"";"";"" "; "S"; "u"; "n"; "s"; "e"; "t";"" "; "R"; "o"; "a"; "d"}
Toto konečné pole sa odovzdá TEXTJOIN, ktorý spojí textové znaky a vypíše výsledok.
Vlastná funkcia na odstránenie čísel z textu
Riešenie funguje pre všetky verzie aplikácie Excel
Vzhľadom na to, že robustný vzorec by mal byť jednoduchý, podelím sa s vami o kód funkcie definovanej používateľom (UDF), ktorá odstraňuje všetky číselné znaky.
Kód VBA 1:
Funkcia 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 FunctionKód VBA 2:
Funkcia RemoveNumbers(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionPodobne ako v prípade funkcie RemoveText je druhý kód vhodnejšie použiť vo veľkých pracovných listoch na optimalizáciu výkonu.
Po pridaní kódu do zošita môžete pomocou tejto vlastnej funkcie odstrániť všetky číselné znaky z bunky:
RemoveNumbers(reťazec)V našom prípade je vzorec v B2 nasledovný:
=RemoveNumbers(A2)
Ak chcete orezať prípadné úvodné medzery, vložte vlastnú funkciu do funkcie TRIM ako v prípade pôvodného vzorca:
=TRIM(RemoveNumbers(A2))
Rozdelenie čísel a textu do samostatných stĺpcov
V situácii, keď chcete oddeliť text a čísla do dvoch stĺpcov, by bolo pekné, keby ste túto úlohu vykonali pomocou jediného vzorca, súhlasíte? Na tento účel stačí zlúčiť kód RemoveText a RemoveNumbers funkcie do jednej funkcie s názvom SplitTextNumbers alebo jednoducho Split alebo čokoľvek iné :)
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 EndFunkciaKód VBA 2:
Funkcia 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 FunctionNaša nová vlastná funkcia vyžaduje dva argumenty:
SplitTextNumbers(string, is_remove_text)Kde is_remove_text je logická hodnota, ktorá určuje, ktoré znaky sa majú odstrániť:
- TRUE alebo 1 - odstrániť text a ponechať čísla
- FALSE alebo 0 - odstráňte čísla a ponechajte text
Pre náš vzorový súbor údajov majú vzorce tento tvar:
Odstránenie nečíselných znakov:
=SplitTextNumbers(A2, TRUE)
Odstránenie číselných znakov:
=SplitTextNumbers(A2, FALSE)
Tip: Aby ste sa vyhli možnému problému s úvodnými medzerami, odporúčam vzorec, ktorý odstraňuje čísla, vždy obaliť funkciou TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Špeciálny nástroj na odstránenie čísel alebo textu
Pre tých, ktorí nemajú radi zbytočné komplikácie, ukážem náš vlastný spôsob odstraňovania textu alebo čísel v programe Excel.
Za predpokladu, že náš balík Ultimate Suite je pridaný na pásku aplikácie Excel, urobíte toto:
- Na Údaje Ablebits na karte Text kliknite na položku Odstránenie stránky > Odstrániť znaky .
Tip. Ak výsledky obsahujú niekoľko úvodných medzier, nástroj Trim Spaces ich okamžite odstráni.
To je spôsob, ako odstrániť textové alebo číselné znaky z reťazca v programe Excel. Ďakujem vám za prečítanie a teším sa na vás na našom blogu budúci týždeň!
Dostupné súbory na stiahnutie
Odstránenie textu alebo čísel v programe Excel - príklady (.xlsm súbor)
Ultimate Suite - skúšobná verzia (.exe súbor)