Obsah
Tento návod ukazuje, ako extrahovať číslo z rôznych textových reťazcov v programe Excel pomocou vzorcov a nástroja Extrahovať.
Pokiaľ ide o extrakciu časti textového reťazca danej dĺžky, Excel poskytuje tri funkcie Substring (Left, Right a Mid), ktoré túto úlohu rýchlo zvládnu. Pokiaľ ide o extrakciu čísel z alfanumerického reťazca, Microsoft Excel neposkytuje... nič.
Na získanie čísla z reťazca v programe Excel je potrebná trocha vynaliezavosti, trpezlivosti a niekoľko rôznych funkcií vnorených do seba. Alebo môžete spustiť nástroj Extrahovať a prácu vykonať jedným kliknutím myšou. Nižšie nájdete všetky podrobnosti o oboch metódach.
Ako extrahovať číslo z konca textového reťazca
Ak máte stĺpec alfanumerických reťazcov, v ktorom sa za textom nachádza číslo, môžete na jeho získanie použiť nasledujúci vzorec.
PRAVDA( bunka , LEN( bunka ) - MAX(IF(ISNUMBER(MID( bunka , ROW(INDIRECT("1:"&LEN( bunka )), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( bunka ))), 0)))Logike vzorca sa budeme venovať neskôr. Zatiaľ stačí nahradiť bunka s odkazom na bunku obsahujúcu pôvodný reťazec (v našom prípade A2) a zadajte vzorec do ľubovoľnej prázdnej bunky v tom istom riadku, napríklad do B2:
=PRAVO(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
Tento vzorec získa číslo len od konca. Ak má reťazec čísla aj na začiatku alebo uprostred, ignorujú sa:
Extrakcia sa vykonáva pomocou funkcie RIGHT, ktorá patrí do kategórie Textové funkcie. Výstupom tejto funkcie je vždy text V našom prípade je výsledkom číselný podreťazec , čo je z hľadiska Excelu tiež text, nie číslo.
Ak potrebujete, aby bol výsledok číslo (ktorý môžete použiť pri ďalších výpočtoch), potom vzorec zabaľte do funkcie VALUE alebo vykonajte aritmetickú operáciu, ktorá nemení výsledok, napríklad vynásobte 1 alebo pripočítajte 0. Ak chcete zachytiť chyby v reťazcoch, ktoré neobsahujú ani jedno číslo, použite funkciu IFERROR. Napríklad
=IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0)))), "")
alebo
=IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")
Poznámka: V aplikácii Excel s dynamickým poľom (Office 365 a 2021) vzorec zadávate bežným spôsobom pomocou klávesu Enter. V aplikácii Excel 2019 a starších funguje len ako vzorec poľa, preto ho nezabudnite dokončiť stlačením klávesov Ctrl + Shift + Enter.
Ako tento vzorec funguje:
Ak chcete extrahovať číslo z alfanumerického reťazca, najprv musíte vedieť, kde začať extrakciu. Pozícia posledného nečíselného znaku v reťazci sa určuje pomocou tohto zložitého vzorca:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))
Aby sme pochopili logiku, preskúmajme ju zvnútra:
Kombinácia ROW(INDIRECT("1:"&LEN(A2))) vytvorí postupnosť čísel, ktorá zodpovedá celkovému počtu znakov v zdrojovom reťazci (A2), a tieto postupné čísla slúžia MID ako počiatočné čísla:
MID(A2, {1;2;3;4;5;6;7;8}, 1)
Funkcia MID vytiahne každý jednotlivý znak z A2 a vráti ho ako pole:
{"0";"5";"-";"E";"C";"-";"0";"1"}
Keďže MID je textová funkcia, jej výstupom je vždy text (ako si môžete všimnúť, všetky znaky sú uzavreté v úvodzovkách). Ak chceme premeniť číselné jednotky na čísla, vynásobíme pole číslom 1 (rovnaký účinok bude mať aj dvojitá negácia --MID()). Výsledkom tejto operácie je pole čísel a chýb #VALUE! reprezentujúcich nečíselné znaky:
ISNUMBER({0;5;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;0;1})
Funkcia ISNUMBER vyhodnotí každý prvok poľa a vydá svoj verdikt vo forme logickej hodnoty - TRUE pre čísla, FALSE pre čokoľvek iné:
{PRAVDA;PRAVDA;NEPRAVDA;NEPRAVDA;NEPRAVDA;NEPRAVDA;PRAVDA;PRAVDA}
Toto pole prejde do logického testu funkcie IF, kde sa každý prvok poľa porovná s hodnotou FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
Pre každú hodnotu FALSE (nečíselná hodnota) vráti ďalšia funkcia ROW(INDIRECT()) jej relatívnu pozíciu v reťazci. Pre každú hodnotu TRUE (číselná hodnota) sa vráti nula. Výsledné pole vyzerá takto:
{0;0;3;4;5;6;0;0}
Zvyšok je jednoduchý. Funkcia MAX nájde najvyššie číslo vo vyššie uvedenom poli, ktoré je pozíciou poslednej nečíselnej hodnoty v reťazci (v našom prípade 6). Jednoducho túto pozíciu odpočítajte od celkovej dĺžky reťazca vrátenej funkciou LEN a výsledok odovzdajte funkcii RIGHT, aby vedela, koľko znakov má z pravej strany reťazca vybrať:
RIGHT(A2, LEN(A2) - 6)
Hotovo!
Ako extrahovať číslo zo začiatku textového reťazca
Ak pracujete so záznamami, v ktorých sa za číslom nachádza text, môžete číslo extrahovať zo začiatku reťazca pomocou tohto všeobecného vzorca:
LEFT( bunka , MATCH(FALSE, ISNUMBER(MID( bunka , ROW(INDIRECT("1:"&LEN( bunka )+1)), 1) *1), 0) -1)S pôvodným reťazcom v A2 získate číslo pomocou nasledujúceho vzorca:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
Nezáleží na tom, koľko číslic je uprostred alebo na konci, extrahuje sa len počiatočné číslo:
Poznámka: V aplikáciách Excel 365 a Excel 2021 vďaka podpore dynamických polí funguje bežný vzorec dobre. V aplikáciách Excel 2019 a starších by ste mali stlačiť klávesovú skratku Ctrl + Shift + Enter, aby ste explicitne vytvorili vzorec vzorec poľa .
Ako tento vzorec funguje:
Aj tu použijeme kombináciu funkcií ROW, INDIRECT a LEN na vytvorenie postupnosti čísel rovnajúcej sa celkovému počtu znakov v zdrojovom reťazci plus 1 (úloha tohto ďalšieho znaku bude jasná o niečo neskôr).
ROW(INDIRECT("1:"&LEN(A2)+1))
MID a ISNUMBER vykonávajú rovnakú prácu ako v predchádzajúcom príklade - MID vytiahne jednotlivé znaky a ISNUMBER ich prevedie na logické hodnoty. Výsledné pole TRUE a FALSE sa dostane do funkcie MATCH ako vyhľadávacie pole:
MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)
MATCH vypočíta relatívnu pozíciu prvého FALSE, čím nám poskytne pozíciu prvého nečíselného znaku v reťazci (3 v A2). Aby sme získali predchádzajúce čísla, odčítame 1 od pozície prvého textového znaku a rozdiel podávame num_chars argument funkcie LEFT:
LEFT(A2, 3-1)
Teraz sa vráťme k "extra" znaku v postupnosti vygenerovanej funkciou ROW(INDIRECT()+1)). Ako už viete, táto postupnosť poskytuje východiskové body pre funkciu MID. Bez +1 by MID vyextrahovala presne toľko znakov, koľko je v pôvodnom reťazci. Ak reťazec obsahuje iba čísla, ISNUMBER vráti iba TRUE, zatiaľ čo MATCH potrebuje aspoň jeden FALSE. Aby sme to zabezpečili, pridáme jedenviac znakov na celkovú dĺžku reťazca, ktorý by funkcia MID konvertovala na prázdny reťazec. Napríklad v prípade B7 funkcia MID vráti toto pole:
{"1"; "2"; "3"; "4";""}
Poznámka: Podobne ako funkcia RIGHT, aj funkcia LEFT vracia číselný podreťazec Ak chcete získať výsledok ako číslo, a nie ako číselný reťazec, vložte vzorec do funkcie VALUE alebo vynásobte výsledok číslom 1, ako je uvedené v prvom príklade.
Ako získať číslo z ľubovoľnej pozície v reťazci
Ak vaša úloha zahŕňa extrakciu čísla z ľubovoľného miesta v reťazci, môžete použiť nasledujúci ohromujúci vzorec uverejnený na fóre MrExcel:
=SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)
Kde A2 je pôvodný textový reťazec.
Rozbor tohto vzorca by si vyžadoval samostatný článok, takže si ho môžete jednoducho skopírovať do pracovného hárku a uistiť sa, že naozaj funguje :)
Pri skúmaní výsledkov si však môžete všimnúť jednu nepodstatnú nevýhodu - ak zdrojový reťazec neobsahuje číslo, vzorec vráti nulu, ako v riadku 6 na obrázku vyššie. Ak to chcete napraviť, môžete vzorec zabaliť do príkazu IF, ktorého logický test skontroluje, či zdrojový reťazec obsahuje nejaké číslo. Ak áno, vzorec toto číslo extrahuje, inak vráti prázdnyreťazec:
=IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")
Ako je znázornené na nasledujúcom obrázku, vylepšený vzorec funguje nádherne (za toto vylepšenie patrí vďaka nášmu guru programu Excel Alexovi):
Na rozdiel od všetkých predchádzajúcich príkladov je výsledkom tohto vzorca číslo Aby ste sa o tom presvedčili, stačí si všimnúť hodnoty zarovnané doprava v stĺpci B a skrátené úvodné nuly.
Tip. V aplikácii Excel 365 - Excel 2019 existuje oveľa jednoduchšie riešenie pomocou funkcie TEXTJOIN. Pozrite si časť Ako odstrániť text a ponechať čísla.
Výpis čísla z textového reťazca pomocou balíka Ultimate Suite
Ako ste práve videli, neexistuje žiadny triviálny vzorec programu Excel na získanie čísla z textového reťazca. Ak máte problémy s pochopením vzorcov alebo ich úpravou pre vaše súbory údajov, možno sa vám bude páčiť tento jednoduchý spôsob získania čísla z reťazca v programe Excel.
Pomocou nášho balíka Ultimate Suite pridaného do pásu aplikácie Excel môžete takto rýchlo získať číslo z ľubovoľného alfanumerického reťazca:
- Prejdite na Údaje Ablebits karta> Text a kliknite na tlačidlo Výpis :
- Vyberte všetky bunky so zdrojovými reťazcami.
- Na paneli nástroja Extrahovať vyberte Čísla výpisov prepínač.
- V závislosti od toho, či chcete, aby výsledky boli vzorce alebo hodnoty, vyberte Vložiť ako vzorec alebo ho ponechajte bez označenia (predvolené nastavenie).
Toto políčko odporúčam označiť, ak chcete, aby sa extrahované čísla automaticky aktualizovali hneď po vykonaní akýchkoľvek zmien v zdrojových reťazcoch. Ak chcete, aby výsledky boli nezávislé od pôvodných reťazcov (napr. v prípade, že plánujete neskôr odstrániť zdrojové údaje), potom toto políčko neoznačujte.
- Kliknite na tlačidlo Vloženie výsledkov Hotovo!
Podobne ako v predchádzajúcom príklade, výsledky extrakcie sú čísla , čo znamená, že s nimi môžete počítať, sčítavať, priemerovať alebo vykonávať akékoľvek iné výpočty.
V tomto príklade sme sa rozhodli vložiť výsledky ako hodnoty a doplnok splnil presne to, čo sa od neho požadovalo:
Ak sa Vložiť ako vzorec začiarkavacie políčko bolo začiarknuté, pozorovali by ste vzorec v paneli vzorcov. Ste zvedaví, ktorý z nich to je? Stačí si stiahnuť skúšobnú verziu balíka Ultimate Suite a presvedčíte sa sami :)
Dostupné súbory na stiahnutie
Excel Výpis čísla - vzorový zošit (.xlsx súbor)
Ultimate Suite - skúšobná verzia (.exe súbor)