Sadržaj
Udžbenik pokazuje kako izdvojiti broj iz različitih tekstualnih nizova u Excelu pomoću formula i alata za izdvajanje.
Kada je u pitanju izdvajanje dijela tekstualnog niza zadane duljine , Excel nudi tri funkcije Substring (lijevo, desno i sredina) za brzo rješavanje zadatka. Kada je riječ o izvlačenju brojeva iz alfanumeričkog niza, Microsoft Excel ne pruža... ništa.
Da biste dobili broj iz niza u Excelu, potrebno je malo domišljatosti, malo strpljenja i hrpa različitih funkcija ugniježđeni jedno u drugo. Ili, možete pokrenuti alat Extract i obaviti posao klikom miša. U nastavku ćete pronaći sve pojedinosti o objema metodama.
Kako izdvojiti broj s kraja tekstualnog niza
Kada imate stupac alfanumeričkih nizova nakon kojih dolazi broj teksta, možete koristiti sljedeću formulu da biste ga dobili.
RIGHT( cell, LEN( cell) - MAX(IF(ISNUMBER(MID( cell<2)>, ROW(INDIRECT("1:"&LEN( cell ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( cell ))), 0)))Zadržat ćemo se na logici formule malo kasnije. Za sada jednostavno zamijenite ćeliju referencom na ćeliju koja sadrži originalni niz (A2 u našem slučaju) i unesite formulu u bilo koju praznu ćeliju u istom retku, recimo u B2:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
Ova formula dobiva broj samo s kraja. Ako niz također ima brojeve na početku ili u sredini, oni jesuignorirano:
Izdvajanje se izvodi funkcijom DESNO koja pripada kategoriji tekstualnih funkcija. Izlaz ove funkcije uvijek je tekst . U našem slučaju, rezultat je numerički podniz , što je u smislu Excela također tekst, a ne broj.
Ako trebate da rezultat bude broj (koje možete koristiti u daljnjim izračunima), zatim umotajte formulu u funkciju VRIJEDNOST ili izvedite aritmetičku operaciju koja ne mijenja rezultat, recimo, pomnožite s 1 ili dodajte 0. Za otkrivanje pogrešaka u nizovima koji ne sadrže jedan broj, koristite funkciju IFERROR. Na primjer:
=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)))), "")
ili
=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, "")
Napomena. U Dynamic Array Excel (Office 365 i 2021), formulu unosite na uobičajeni način tipkom Enter. U programu Excel 2019 i ranijim verzijama radi samo kao formula polja, stoga ne zaboravite pritisnuti Ctrl + Shift + Enter da biste je dovršili.
Kako ova formula funkcionira:
Da biste izdvojili broj iz alfanumeričkog niza, prvo što morate znati je gdje započeti izdvajanje. Položaj posljednjeg nenumeričkog znaka u nizu određuje se uz pomoć ove lukave formule:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN() A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))
Da bismo razumjeli logiku, istražimo je iznutra :
Kombinacija ROW(INDIRECT("1:"&LEN(A2)))stvara niz brojeva koji odgovara ukupnom broju znakova u izvornom nizu (A2), a mi poslužujemo ove sekvencijalne brojeve MID-u kao početne brojeve:
MID(A2, {1;2;3;4 ;5;6;7;8}, 1)
Funkcija MID povlači svaki pojedinačni znak iz A2 i vraća ih kao niz:
{"0";"5";" -";"E";"C";"-";"0";"1"}
Kako je MID tekstualna funkcija, njen izlaz je uvijek tekst (kao što možete primijetiti, svi znakovi nalaze se pod navodnicima). Da bismo numeričke pretvorili u brojeve, pomnožimo niz s 1 (dvostruka negacija --MID() imat će isti učinak). Rezultat ove operacije je niz brojeva i #VALUE! pogreške koje predstavljaju nenumeričke znakove:
ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})
Funkcija ISNUMBER procjenjuje svaki element niza i daje svoju presudu u obliku Booleovih vrijednosti - TRUE za brojeve, FALSE za bilo što drugo:
{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}
Ovaj niz ide na logički test funkcije IF, gdje se svaki element niza uspoređuje s FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE) ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
Za svaki FALSE (nenumerička vrijednost), druga funkcija ROW(INDIRECT()) vraća njegov relativni položaj u nizu. Za svaku TRUE (numeričku vrijednost) vraća se nula. Rezultirajući niz izgleda kaoslijedi:
{0;0;3;4;5;6;0;0}
Ostalo je jednostavno. Funkcija MAX pronalazi najveći broj u gornjem nizu, što je položaj zadnje nenumeričke vrijednosti u nizu (6 u našem slučaju). Jednostavno oduzmite tu poziciju od ukupne duljine niza koju je vratio LEN i proslijedite rezultat RIGHT-u da biste znali koliko znakova treba izdvojiti s desne strane niza:
RIGHT(A2, LEN (A2) - 6)
Gotovo!
Kako izdvojiti broj s početka tekstualnog niza
Ako radite sa zapisima u kojima se tekst pojavljuje nakon broja, možete izvucite broj s početka niza pomoću ove generičke formule:
LEFT( cell , MATCH(FALSE, ISNUMBER(MID( cell , ROW(INDIRECT("1: "&LEN( ćelija )+1)), 1) *1), 0) -1)S izvornim nizom u A2, upotrijebite sljedeću formulu da biste dobili broj:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
Bez obzira koliko je znamenki u sredini ili na kraju, izdvaja se samo početni broj:
Napomena. U Excelu 365 i Excelu 2021, zbog podrške za dinamičke nizove, obična formula dobro funkcionira. U programu Excel 2019 i ranijim verzijama trebali biste pritisnuti Ctrl + Shift + Enter kako biste to izričito učinili formulom polja .
Kako ova formula funkcionira:
Ovdje ponovno koristimo kombinaciju funkcija ROW, INDIRECT i LEN za stvaranje niza brojeva jednakih ukupnom broju znakova u izvornom nizu plus 1 (uloga togadodatni znak će postati jasniji malo kasnije).
REDAK(INDIREKT("1:"&LEN(A2)+1))
SREDINA i BROJ rade isti posao kao u prethodni primjer - MID povlači pojedinačne znakove, a ISNUMBER ih pretvara u logičke vrijednosti. Rezultirajući niz TRUE i FALSE ide u funkciju MATCH kao niz za pretraživanje:
MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)
MATCH izračunava relativni položaj prvog FALSE, dajući nam položaj prvog nenumeričkog znaka u nizu (3 u A2). Da bismo izdvojili prethodne brojeve, oduzimamo 1 od položaja prvog znaka teksta i serviramo razliku u num_chars argumentu funkcije LEFT:
LEFT(A2, 3-1)
Sada se vratimo na "dodatni" znak u nizu koji generira ROW(INDIRECT()+1)). Kao što već znate, ovaj niz daje početne točke za MID funkciju. Bez +1, MID bi izdvojio točno onoliko znakova koliko ih ima u izvornom nizu. Ako niz sadrži samo brojeve, ISNUMBER će vratiti samo TRUE dok MATCH treba najmanje jedan FALSE. Kako bismo to osigurali, ukupnoj duljini niza dodajemo još jedan znak koji bi funkcija MID pretvorila u prazan niz. Na primjer, u B7, MID vraća ovaj niz:
{"1";"2";"3";"4";""}
Napomena. Kao što je slučaj s funkcijom RIGHT, LEFT također vraća broj podniz , koji je tehnički tekst, a ne broj. Da biste dobili rezultat kao broj, a ne kao numerički niz, ugniježdite formulu u funkciju VRIJEDNOST ili pomnožite rezultat s 1 kao što je prikazano u prvom primjeru.
Kako dobiti broj s bilo koje pozicije u nizu
Ako vaš zadatak podrazumijeva izdvajanje broja s bilo kojeg mjesta u nizu, možete upotrijebiti sljedeću zapanjujuću formulu objavljenu na forumu 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)
Gdje je A2 izvorni tekstualni niz.
Razlaganje ove formule zahtijevalo bi poseban članak, tako da ga možete jednostavno kopirati na svoj radni list kako biste bili sigurni da stvarno radi :)
Međutim, nakon ispitivanja rezultata, možete primijetiti jedan beznačajan nedostatak - ako izvorni niz ne sadrži broj, formula vraća nulu, kao u retku 6 na gornjoj snimci zaslona. Da biste to popravili, možete zamotati formulu u naredbu IF, čiji logički test provjerava sadrži li izvorni niz bilo koji broj. Ako se dogodi, formula izdvaja broj, inače vraća prazan niz:
=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),"")
Kao što je prikazano na snimci zaslona u nastavku, poboljšana formula radi prekrasno (svaka čast Alexu, našem Excel guruu, za ovo poboljšanje):
Za razliku od svih prethodnih primjera, rezultat ove formule je broj . Kako biste se u to uvjerili, samo primijetite desno poravnate vrijednosti u stupcu B i skraćene početne nule.
Savjet. U Excelu 365 -Excel 2019, postoji puno jednostavnije rješenje uz pomoć funkcije TEXTJOIN. Pogledajte Kako ukloniti tekst i zadržati brojeve.
Izdvojite broj iz tekstualnog niza pomoću Ultimate Suite
Kao što ste upravo vidjeli, ne postoji trivijalna Excel formula za izvlačenje broja iz tekstualnog niza. Ako imate poteškoća s razumijevanjem formula ili njihovim podešavanjem za svoje skupove podataka, možda će vam se svidjeti ovaj jednostavan način da dobijete broj iz niza u Excelu.
S našim Ultimate Suite-om koji je dodan vašoj Excel vrpci, ovo je način na koji može brzo dohvatiti broj iz bilo kojeg alfanumeričkog niza:
- Idite na karticu Ablebits Data > Tekst grupu i kliknite Izdvoj :
- Odaberite sve ćelije s izvornim nizovima.
- U oknu alata za izdvajanje odaberite radio gumb Izdvajaj brojeve .
- Ovisno o tome želite li da rezultati budu formule ili vrijednosti, odaberite okvir Umetni kao formulu ili ga ostavite neoznačenim (zadano).
Moj savjet je da odaberete ovaj okvir ako želite da se izdvojeni brojevi automatski ažuriraju čim se naprave bilo kakve promjene u izvornim nizovima. Ako želite da rezultati budu neovisni o izvornim nizovima (npr. u slučaju da kasnije planirate ukloniti izvorne podatke), nemojte označavati ovaj okvir.
- Kliknite gumb Umetni rezultate . Gotovo!
Kao u prethodnom primjeru, rezultatiizdvajanje su brojevi , što znači da možete slobodno brojati, zbrajati, prosječiti ili izvoditi bilo koje druge izračune s njima.
U ovom primjeru, odlučili smo umetnuti rezultate kao vrijednosti , a dodatak je učinio točno ono što je traženo:
Ako je odabran potvrdni okvir Umetni kao formulu , d promatrajte formulu u traci formule. Zanima vas koji? Samo preuzmite probnu verziju Ultimate Suitea i uvjerite se sami :)
Dostupna preuzimanja
Excel Extract Number - primjer radne knjige (.xlsx datoteka)
Ultimate Suite - probna verzija (.exe datoteka)