Obsah
Výukový program ukazuje, jak extrahovat čísla z různých textových řetězců v aplikaci Excel pomocí vzorců a nástroje Extrahovat.
Pokud jde o extrakci části textového řetězce dané délky, Excel nabízí tři funkce Substring (Left, Right a Mid), které tento úkol rychle zvládnou. Pokud jde o extrakci čísel z alfanumerického řetězce, Microsoft Excel nenabízí... nic.
Získat číslo z řetězce v aplikaci Excel vyžaduje trochu vynalézavosti, trpělivosti a několik různých funkcí vnořených do sebe. Nebo můžete spustit nástroj Extrahovat a mít práci hotovou jedním kliknutím myši. Níže najdete podrobné informace o obou metodách.
Jak extrahovat číslo z konce textového řetězce
Pokud máte sloupec alfanumerických řetězců, kde se za textem nachází číslo, můžete jej získat pomocí následujícího vzorce.
PRAVDA( buňka , LEN( buňka ) - MAX(IF(ISNUMBER(MID( buňka , ROW(INDIRECT("1:"&LEN( buňka )), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( buňka ))), 0)))Logikou vzorce se budeme zabývat později. Prozatím stačí nahradit vzorec buňka s odkazem na buňku obsahující původní řetězec (v našem případě A2) a zadejte vzorec do libovolné prázdné buňky ve stejném řádku, napří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íská číslo pouze od konce. Pokud má řetězec čísla i na začátku nebo uprostřed, jsou ignorována:
Extrakce se provádí pomocí funkce RIGHT, která patří do kategorie funkcí Text. Výstupem této funkce je vždy funkce text V našem případě je výsledkem číselný podřetězec , což je z hlediska Excelu také text, nikoli číslo.
Pokud potřebujete, aby byl výsledek číslo (který můžete použít při dalších výpočtech), pak vzorec zabalte do funkce VALUE nebo proveďte aritmetickou operaci, která nezmění výsledek, například vynásobte 1 nebo přičtěte 0. Chcete-li zachytit chyby v řetězcích, které neobsahují jediné číslo, použijte funkci IFERROR. Napří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)))), "")
nebo
=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 aplikaci Excel s dynamickým polem (Office 365 a 2021) zadáváte vzorec obvyklým způsobem pomocí klávesy Enter. V aplikaci Excel 2019 a starších funguje pouze jako vzorec pole, takže nezapomeňte stisknout klávesy Ctrl + Shift + Enter, abyste jej dokončili.
Jak tento vzorec funguje:
Chcete-li extrahovat číslo z alfanumerického řetězce, musíte nejprve vědět, kde začít extrakci. Pozici posledního nečíselného znaku v řetězci určíte pomocí tohoto složitého vzorce:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
Abychom pochopili logiku, prozkoumejme ji zevnitř:
Kombinace ROW(INDIRECT("1:"&LEN(A2))) vytvoří posloupnost čísel odpovídající celkovému počtu znaků ve zdrojovém řetězci (A2) a tato pořadová čísla slouží MID jako počáteční čísla:
MID(A2, {1;2;3;4;5;6;7;8}, 1)
Funkce MID vytáhne jednotlivé znaky z A2 a vrátí je jako pole:
{"0";"5";"-";"E";"C";"-";"0";"1"}
Protože MID je textová funkce, jejím výstupem je vždy text (jak si můžete všimnout, všechny znaky jsou uzavřeny v uvozovkách). Abychom z číselných jedniček udělali čísla, vynásobíme pole číslem 1 (stejný efekt bude mít i dvojnásobná negace --MID()). Výsledkem této operace je pole čísel a chyb #VALUE! reprezentujících nečíselné znaky:
ISNUMBER({0;5;#HODNOTA!;#HODNOTA!;#HODNOTA!;#HODNOTA!;0;1})
Funkce ISNUMBER vyhodnotí každý prvek pole a vydá svůj verdikt ve formě logických hodnot - TRUE pro čísla, FALSE pro cokoli jiného:
{PRAVDA;PRAVDA;NEPRAVDA;NEPRAVDA;NEPRAVDA;NEPRAVDA;PRAVDA;PRAVDA}
Toto pole přechází do logického testu funkce IF, kde se každý prvek pole porovnává s FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
Pro každou hodnotu FALSE (nečíselná hodnota) vrátí další funkce ROW(INDIRECT()) její relativní pozici v řetězci. Pro každou hodnotu TRUE (číselná hodnota) je vrácena nula. Výsledné pole vypadá následovně:
{0;0;3;4;5;6;0;0}
Zbytek je snadný. Funkce MAX zjistí nejvyšší číslo ve výše uvedeném poli, což je pozice poslední nečíselné hodnoty v řetězci (v našem případě 6). Tuto pozici jednoduše odečtěte od celkové délky řetězce vrácené funkcí LEN a výsledek předejte funkci RIGHT, aby věděla, kolik znaků má z pravé strany řetězce vyjmout:
RIGHT(A2, LEN(A2) - 6)
Hotovo!
Jak extrahovat číslo ze začátku textového řetězce
Pokud pracujete se záznamy, kde se za číslem objevuje text, můžete číslo extrahovat ze začátku řetězce pomocí tohoto obecného vzorce:
LEVÝ( buňka , MATCH(FALSE, ISNUMBER(MID( buňka , ROW(INDIRECT("1:"&LEN( buňka )+1)), 1) *1), 0) -1)Původní řetězec v A2 získáte pomocí následujícího vzorce:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
Nezáleží na tom, kolik číslic je uprostřed nebo na konci, extrahuje se pouze počáteční číslo:
Poznámka: V aplikacích Excel 365 a Excel 2021 funguje díky podpoře dynamických polí dobře běžný vzorec. V aplikacích Excel 2019 a starších je třeba stisknout klávesy Ctrl + Shift + Enter, aby se z něj výslovně stal vzorec. vzorec pole .
Jak tento vzorec funguje:
Zde opět použijeme kombinaci funkcí ROW, INDIRECT a LEN k vytvoření posloupnosti čísel rovnající se celkovému počtu znaků ve zdrojovém řetězci plus 1 (úloha tohoto dodatečného znaku bude objasněna o něco později).
ROW(INDIRECT("1:"&LEN(A2)+1))
MID a ISNUMBER dělají stejnou práci jako v předchozím příkladu - MID vytáhne jednotlivé znaky a ISNUMBER je převede na logické hodnoty. Výsledné pole TRUE a FALSE se předá funkci MATCH jako vyhledávací pole:
MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE}, 0)
MATCH vypočítá relativní pozici prvního znaku FALSE, čímž získáme pozici prvního nečíselného znaku v řetězci (3 v A2). Abychom získali předchozí čísla, odečteme 1 od pozice prvního textového znaku a rozdíl podáváme do řetězce num_chars argumentu funkce LEFT:
LEFT(A2, 3-1)
Nyní se vrátíme k "extra" znaku v posloupnosti vygenerované funkcí ROW(INDIRECT()+1)). Jak již víte, tato posloupnost poskytuje výchozí body pro funkci MID. Bez +1 by MID extrahovala přesně tolik znaků, kolik jich je v původním řetězci. Pokud řetězec obsahuje pouze čísla, ISNUMBER bude vracet pouze TRUE, zatímco MATCH potřebuje alespoň jeden FALSE. Abychom to zajistili, přidáme jeden znak.více znaků do celkové délky řetězce, který by funkce MID převedla na prázdný řetězec. Například v B7 vrátí MID toto pole:
{"1"; "2"; "3"; "4";""}
Poznámka: Stejně jako v případě funkce RIGHT vrací i funkce LEFT hodnotu číselný podřetězec , což je technicky vzato text, nikoli číslo. Chcete-li získat výsledek jako číslo, nikoli jako číselný řetězec, vnořte vzorec do funkce VALUE nebo vynásobte výsledek číslem 1, jak je uvedeno v prvním příkladu.
Jak získat číslo z libovolné pozice v řetězci
Pokud je vaším úkolem extrahovat číslo z libovolného místa v řetězci, můžete použít následující ohromující vzorec zveřejněný na fóru 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ý řetězec.
Rozebrání tohoto vzorce by si vyžádalo samostatný článek, takže si ho můžete jednoduše zkopírovat do svého pracovního listu a ujistit se, že opravdu funguje :)
Při zkoumání výsledků si však můžete všimnout jedné nepodstatné nevýhody - pokud zdrojový řetězec neobsahuje číslo, vzorec vrátí nulu, jako v řádku 6 na obrázku výše. Chcete-li to napravit, můžete vzorec zabalit do příkazu IF, jehož logický test zkontroluje, zda zdrojový řetězec obsahuje nějaké číslo. Pokud ano, vzorec číslo vytáhne, v opačném případě vrátí prázdnou hodnotu.řetězec:
=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),"")
Jak je vidět na obrázku níže, vylepšený vzorec funguje skvěle (za toto vylepšení děkujeme našemu guru Excelu Alexovi):
Na rozdíl od všech předchozích příkladů je výsledek tohoto vzorce následující číslo Abyste se o tom přesvědčili, stačí si všimnout hodnot zarovnaných doprava ve sloupci B a zkrácených počátečních nul.
Tip: V aplikaci Excel 365 - Excel 2019 existuje mnohem jednodušší řešení pomocí funkce TEXTJOIN. Viz článek Jak odstranit text a zachovat čísla.
Výpis čísla z textového řetězce pomocí sady Ultimate Suite
Jak jste právě viděli, neexistuje žádný triviální vzorec Excelu pro získání čísla z textového řetězce. Pokud máte potíže s pochopením vzorců nebo s jejich úpravou pro vaše datové soubory, možná se vám bude líbit tento jednoduchý způsob, jak získat číslo z řetězce v aplikaci Excel.
S naší sadou Ultimate Suite přidanou na pás karet aplikace Excel můžete rychle získat číslo z libovolného alfanumerického řetězce:
- Přejděte na Data Ablebits karta> Text a klikněte na tlačítko Výpis :
- Vyberte všechny buňky se zdrojovými řetězci.
- Na panelu nástroje Extrahovat vyberte možnost Čísla výpisů přepínač.
- V závislosti na tom, zda chcete, aby výsledky byly vzorce nebo hodnoty, vyberte možnost Vložit jako vzorec nebo jej nechte nezaškrtnuté (výchozí nastavení).
Toto políčko doporučuji zaškrtnout, pokud chcete, aby se extrahovaná čísla automaticky aktualizovala, jakmile dojde ke změně zdrojových řetězců. Pokud chcete, aby výsledky byly nezávislé na původních řetězcích (např. pro případ, že plánujete později zdrojová data odstranit), pak toto políčko nezaškrtávejte.
- Klikněte na Vložení výsledků Hotovo!
Stejně jako v předchozím příkladu jsou výsledky extrakce následující. čísla , což znamená, že s nimi můžete libovolně počítat, sčítat, průměrovat nebo provádět jakékoli jiné výpočty.
V tomto příkladu jsme se rozhodli vložit výsledky jako hodnoty a doplněk splnil přesně to, co bylo požadováno:
Pokud Vložit jako vzorec bylo zaškrtnuto políčko, můžete pozorovat. vzorec v panelu vzorců. Zajímá vás, který z nich to je? Stáhněte si zkušební verzi Ultimate Suite a přesvědčte se sami :)
Dostupné soubory ke stažení
Číslo výpisu aplikace Excel - ukázkový sešit (.xlsx soubor)
Ultimate Suite - zkušební verze (.exe soubor)