Sadržaj
Ovaj vodič će vas naučiti kako da odvojite tekst od brojeva u Excelu korištenjem izvornih formula i prilagođenih funkcija. Također ćete naučiti kako podijeliti tekst i brojeve u dvije odvojene kolone.
Zamislite ovo: primate sirove podatke za analizu i saznajete da su brojevi pomiješani s tekstom u jednoj koloni. U većini situacija sigurno će biti zgodnije imati ih u odvojenim kolonama radi detaljnijeg pregleda.
U slučaju da radite s homogenim podacima, vjerovatno biste mogli koristiti funkcije LIJEVO, DESNO i SREDINO za izdvajanje isti broj znakova sa iste pozicije. Ali to je idealan scenario za laboratorijska ispitivanja. U stvarnom životu, najvjerovatnije ćete imati posla s različitim podacima gdje brojevi dolaze prije teksta, poslije teksta ili između teksta. Donji primjeri pružaju rješenja upravo za ovaj slučaj.
Kako ukloniti tekst i zadržati brojeve u Excel ćelijama
Rješenje radi u Excel 365, Excel 2021 , i Excel 2019
Microsoft Excel 2019 uveo je nekoliko novih funkcija koje nisu bile dostupne u ranijim verzijama, a mi ćemo koristiti jednu od takvih funkcija, naime TEXTJOIN, za uklanjanje znakova teksta iz ćelije sadrži brojeve.
Generička formula je:
TEXTJOIN("", TRUE, IFERROR(MID( cell, ROW(INDIRECT( "1:"&LEN(<1)>cell))), 1) *1, ""))U Excel 365 i 2021, ovo će također raditi:
Na prvi pogled, formule mogu izgledati pomalo zastrašujuće, ali rade :)
Na primjer, da biste uklonili tekst iz brojeva u A2, unesite jednu od donjih formula u B2, a zatim je kopirajte u onoliko ćelija koliko je potrebno.
U programu Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
U Excel 2019, mora se unijeti kao formula niza pomoću Ctrl + Shift + Enter. U dinamičkom nizu Excel, radi kao normalna formula dovršena tipkom Enter.
U Excel 365 i 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Kao rezultat, svi tekstualni znakovi su uklonjeni iz ćelije i brojevi se čuvaju:
Kako ova formula funkcionira:
Da bismo bolje razumjeli logiku, počnimo istraživati formula iznutra:
Koristite ili ROW(INDIRECT("1:"&LEN(string))) ili SEQUENCE(LEN(string)) da kreirate niz brojeva koji odgovaraju ukupnom broju znakova u izvornom nizu, a zatim unesite te sekvencijalne brojeve funkciji MID kao početne brojeve. U B2, ovaj dio formule izgleda ovako:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Funkcija MID izdvaja svaki znak iz A2 počevši od prvog i vraća ih kao niz:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Ovaj niz se množi sa 1. Numeričke vrijednosti ostaju bez promjene, dok množenje nenumeričkog znaka rezultira #VRIJEDNOST! greška:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Upravlja funkcija IFERRORove greške i zamjenjuje ih praznim nizovima:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Ovaj konačni niz se servira funkciji TEXTJOIN, koja spaja neprazne vrijednosti u nizu ( ignore_empty argument postavljen na TRUE) koristeći prazan niz ("") za graničnik:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Savjet. Za Excel 2016 - 2007 također postoji rješenje, ali je formula daleko složenija. Možete ga pronaći u ovom vodiču: Kako izdvojiti brojeve u Excelu.
Prilagođena funkcija za uklanjanje teksta iz brojeva
Rješenje radi za sve verzije Excela
Ako koristite stariju verziju Excela ili pronađite i gornje formule teško zapamtiti, ništa vas ne sprječava da kreirate vlastitu funkciju sa jednostavnijom sintaksom i korisničkim imenom kao što je RemoveText . Korisnički definirana funkcija (UDF) može se napisati na dva načina:
VBA kod 1:
Ovdje gledamo svaki znak u izvornom nizu jedan po jedan i provjeri je li numerički ili ne. Ako je broj, rezultujućem nizu se dodaje znak.
Funkcija RemoveText(str As String) Dim sRes As String sRes = "" Za i = 1 To Len(str) Ako je True = IsNumeric(Mid(str, i) , 1)) Tada je sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunkcijaVBA kod 2:
Kôd kreira objekat za obradu regularnog izraza. Koristeći RegExp, uklanjamo sve znakove osim cifara 0-9 iz izvornog niza.
Funkcija RemoveText(str As String ) Kao niz sa CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) Kraj sa funkcijom EndNa malim radnim listovima oba koda će raditi podjednako dobro. Na velikim radnim listovima na kojima se funkcija poziva stotine ili hiljade puta, kod 2 koji koristi VBScript.RegExp će raditi brže.
Detaljne korake za umetanje koda u radnu svesku možete pronaći ovdje: Kako umetnuti VBA koda u Excelu.
Koji god pristup da odaberete, iz perspektive krajnjeg korisnika, funkcija za brisanje teksta i ostavljanje brojeva je jednostavna kao što je ova:
Ukloni tekst(string)Na primjer, za uklonite nenumeričke znakove iz ćelije A2, formula u B2 je:
=RemoveText(A2)
Samo je kopirajte niz kolonu i dobit ćete ovaj rezultat:
Napomena. I izvorne formule i prilagođena funkcija izlaze numerički niz . Da biste ga pretvorili u broj, pomnožite rezultat sa 1, ili dodajte nulu, ili umotajte formulu u funkciju VALUE. Na primjer:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Kako ukloniti brojeve iz tekstualnog niza u Excelu
Rješenje radi u Excelu 365, Excel 2021 i Excelu 2019
Formule za uklanjanje brojeva iz alfanumeričkog niza su prilično slične onima o kojima se raspravljalo u prethodnom primjeru.
Za Excel 365 - 2019:
TEXTJOIN(" ", TRUE, IF(ISERR(SREDINA( ćelija , ROW(INDIREKTNO("1:"&LEN( ćelija ) )), 1) *1), SREDINA( ćelija , ROW(INDIRECT("1:"&LEN( ) cell ))), 1), ""))U Excelu 2019, ne zaboravite da to učinite formulom niza tako što ćete zajedno pritisnuti tipke Ctrl + Shift + Enter.
Za Excel 365 i 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( cell , SEQUENCE(LEN( cell 1) *1), MID) ( ćelija , SEQUENCE(LEN( ćelija )), 1), ""))Na primjer, za uklanjanje brojeva iz niza u A2, formula je:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Ili
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
Kao rezultat, svi brojevi se uklanjaju iz ćelije, a znakovi teksta se zadržavaju:
Kao što je prikazano na slici iznad, formula uklanja numeričke znakove sa bilo koje pozicije u nizu: na početku, na kraju i u sredini. Međutim, postoji upozorenje: ako je niz počinje s brojem nakon kojeg slijedi razmak , taj razmak se zadržava, što stvara problem vodećih razmaka (kao u B2).
Da biste se riješili dodatnih razmaka prije teksta , umotajte formulu u funkciju TRIM ovako:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Sada, vaši rezultati su apsolutno savršeni!
Kako ova formula funkcionira:
U suštini, formula radi isto kao što je objašnjeno u prethodnom primjeru. Razlika je u tome što, iz konačnog niza koji se servira funkciji TEXTJOIN, morate ukloniti brojeve, a ne tekst. Da bismo to učinili, koristimo kombinaciju funkcija IF i ISERROR.
Kao što se sjećate,MID(…)+0 generiše niz brojeva i #VRIJEDNOST! greške koje predstavljaju tekstualne znakove na istim pozicijama:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Funkcija ISERROR hvata greške i prosljeđuje rezultirajući niz Booleovih vrijednosti u IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Kada funkcija IF vidi TRUE (greška), ona ubacuje odgovarajući tekstualni karakter u obrađeni niz uz pomoć druge MID funkcije. Kada funkcija IF vidi FALSE (broj), zamjenjuje ga praznim nizom:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Ovaj konačni niz se prosljeđuje na TEXTJOIN, tako da spaja tekstualne znakove i izlazi rezultat.
Prilagođena funkcija za uklanjanje brojeva iz teksta
Rješenje radi za sve verzije Excela
Imajući na umu da treba zadržati robusnu formulu jednostavno, podijelit ću kod korisnički definirane funkcije (UDF) da uklonim bilo koji numerički karakter.
VBA kod 1:
Funkcija RemoveNumbers(str As String) Dim sRes kao niz sRes = "" Za i = 1 do Len(str) Ako je False = IsNumeric(Mid(str, i, 1)) Tada je sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunkcijaVBA kod 2:
Funkcija RemoveNumbers(str As String) Kao niz sa CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) Završava s funkcijom EndKao što je slučaj sa funkcijom RemoveText, drugi kod je bolje koristiti u velikoradne listove za optimizaciju performansi.
Kada se kod doda vašoj radnoj knjizi, možete ukloniti sve numeričke znakove iz ćelije koristeći ovu prilagođenu funkciju:
RemoveNumbers(string)U našem slučaju, formula u B2 je:
=RemoveNumbers(A2)
Da biste skratili vodeće razmake ako ih ima, ugnijezdite prilagođenu funkciju unutar TRIM-a kao što biste to učinili u izvornoj formuli:
=TRIM(RemoveNumbers(A2))
Podijelite brojeve i tekst u zasebne kolone
U situaciji kada želite razdvojiti tekst i brojeve u dvije kolone, bilo bi dobro da se posao obavi jednom formulom , slažete se? Za ovo, samo spojimo kod funkcija RemoveText i RemoveNumbers u jednu funkciju, nazvanu SplitTextNumbers , ili jednostavno Split , ili šta god želite :)
VBA kod 1:
Funkcija SplitTextNumbers(str As String , is_remove_text kao Boolean ) Kao Niz Dim sNum, sText, sChar Kao string sCurChar = sNum = sText = "" Za i = 1 Za Len(str) sCurChar = Mid(str, i, 1) Ako je True = IsNumeric(sCurChar) Tada je sNum = sNum & sChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Tada SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End FunkcijaVBA kod 2:
Funkcija SplitTextNumbers(str As String , is_remove_text) Kao String Sa CreateObject ( "VBScript.RegExp" ) .Global = True Ako je True = is_remove_text Onda .Pattern = "[^0-9]" Drugo.Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End FunctionNaša nova prilagođena funkcija zahtijeva dva argumenta:
SplitTextNumbers(string, is_remove_text)Gdje is_remove_text je Booleova vrijednost koja pokazuje koje znakove treba ukloniti:
- TRUE ili 1 - ukloniti tekst i zadržati brojeve
- FALSE ili 0 - ukloniti brojeve i zadržati tekst
Za naš uzorak skupa podataka, formule imaju ovaj oblik:
Da biste uklonili nenumeričke znakove:
=SplitTextNumbers(A2, TRUE)
Da biste izbrisali numeričke znakove :
=SplitTextNumbers(A2, FALSE)
Savjet. Da biste izbjegli potencijalni problem vodećih razmaka, preporučujem da uvijek umotate formulu koja uklanja brojeve u funkciju TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Poseban alat za uklanjanje brojeva ili teksta
Za one koji to rade ne volim nepotrebno kompliciranje stvari, pokazat ću naš vlastiti način uklanjanja teksta ili brojeva u Excelu.
Pod pretpostavkom da je naš Ultimate Suite dodan na vašu Excel traku, ovo je ono što radite:
- Na kartici Ablebits Data , u grupi Tekst , kliknite na Ukloni > Ukloni znakove .
Savjet. Ako rezultati sadrže neke vodeće razmake, Trim Spacesalat će ih eliminisati za kratko vrijeme.
Tako možete ukloniti tekstualne ili numeričke znakove iz stringa u Excelu. Zahvaljujem vam na čitanju i radujem se što ću vas vidjeti na našem blogu sljedeće sedmice!
Dostupna preuzimanja
Uklonite tekst ili brojeve u Excelu - primjeri (.xlsm datoteka)
Ultimate Suite - probna verzija (.exe fajl)