Sadržaj
Ovaj vodič će vas naučiti kako odvojiti tekst od brojeva u Excelu pomoću izvornih formula i prilagođenih funkcija. Također ćete naučiti kako podijeliti tekst i brojeve u dva odvojena stupca.
Zamislite ovo: primate neobrađene podatke za analizu i otkrivate da su brojevi pomiješani s tekstom u jednom stupcu. U većini situacija svakako će biti prikladnije imati ih u zasebnim stupcima za pomnije ispitivanje.
U slučaju da radite s homogenim podacima, vjerojatno biste mogli koristiti funkcije LIJEVO, DESNO i SREDINA za izdvajanje isti broj znakova s iste pozicije. Ali to je idealan scenarij za laboratorijske testove. U stvarnom životu najvjerojatnije ćete imati posla s različitim podacima gdje brojevi dolaze prije teksta, nakon teksta ili između teksta. Donji primjeri pružaju rješenja upravo za ovaj slučaj.
Kako ukloniti tekst i zadržati brojeve u ćelijama programa Excel
Rješenje radi u programu Excel 365, Excel 2021 , i Excel 2019
Microsoft Excel 2019 predstavio je nekoliko novih funkcija koje nisu bile dostupne u ranijim verzijama, a mi ćemo upotrijebiti jednu od takvih funkcija, naime TEXTJOIN, za uklanjanje tekstualnih znakova iz ćelije koji sadrži brojeve.
Generička formula je:
TEXTJOIN("", TRUE, IFERROR(MID( cell, ROW(INDIRECT( "1:"&LEN(<1)>cell))), 1) *1, ""))U Excelu 365 i 2021 ovo će također raditi:
TEXTJOIN("", TRUE,IFERROR(MID( cell, SEQUENCE(LEN( cell)), 1) *1, ""))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 niže navedenih 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 programu Excel 2019 mora se unijeti kao formula polja pomoću Ctrl + Shift + Enter . U dinamičkom polju Excel radi kao normalna formula dovršena tipkom Enter.
U Excelu 365 i 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Kao rezultat, svi tekstualni znakovi su uklonjeno iz ćelije, a brojevi su zadržani:
Kako ova formula funkcionira:
Da bismo bolje razumjeli logiku, počnimo istraživati formulu iznutra:
Koristite ROW(INDIRECT("1:"&LEN(string))) ili SEQUENCE(LEN(string)) za stvaranje niza brojeva koji odgovaraju ukupnom broju znakova u izvornom nizu, a zatim unesite te uzastopne brojeve u funkciju 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 s 1. Numeričke vrijednosti ostaju nepromijenjene, dok množenje nenumeričkog znaka rezultira #VALUE! pogreška:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Funkcija IFERROR obrađujeove pogreške i zamjenjuje ih praznim nizovima:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Ovaj konačni niz poslužuje se funkciji TEXTJOIN, koja povezuje neprazne vrijednosti u nizu ( ignore_empty argument postavljen na TRUE) koristeći prazan niz ("") za razdjelnik:
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 programa Excel
Ako koristite stariju verziju programa Excel ili pronađite i gornje formule teško zapamtiti, ništa vas ne sprječava da stvorite svoju vlastitu funkciju s jednostavnijom sintaksom i korisnički razumljivim nazivom 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 prema jedan i provjerite je li numerički ili ne. Ako je broj, znak se dodaje rezultirajućem nizu.
Funkcija RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i) , 1)) Tada je sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA kod 2:
Kod stvara objekt za obradu regularnog izraza. Koristeći RegExp, uklanjamo sve znakove osim znamenki 0-9 iz izvornog niza.
Funkcija RemoveText(str As String ) Kao niz s CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionNa malim radnim listovima oba će koda raditi jednako dobro. Na velikim radnim listovima gdje se funkcija poziva stotine ili tisuće puta, kod 2 koji koristi VBScript.RegExp radit će brže.
Detaljne korake za umetanje koda u radnu knjigu možete pronaći ovdje: Kako umetnuti VBA kod u Excelu.
Koji god pristup odaberete, iz perspektive krajnjeg korisnika, funkcija za brisanje teksta i ostavljanje brojeva jednostavna je kao ova:
RemoveText(string)Na primjer, uklonite nenumeričke znakove iz ćelije A2, formula u B2 je:
=RemoveText(A2)
Samo je kopirajte niz stupac, 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 s 1 ili dodajte nulu ili zamotajte formulu u funkciju VRIJEDNOST. Na primjer:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Kako ukloniti brojeve iz tekstualnog niza u Excelu
Rješenje radi u Excelu 365, Excelu 2021 i Excelu 2019
Formule za uklanjanje brojeva iz alfanumeričkog niza prilično su slične onima o kojima se raspravljalo u prethodnom primjeru.
Za Excel 365 - 2019:
TEXTJOIN(" ", TRUE, IF(ISERR(MID( cell , ROW(INDIRECT("1:"&LEN( cell ) )), 1) *1), MID( cell , ROW(INDIRECT("1:"&LEN( ) ćelija ))), 1), ""))U programu Excel 2019, ne zaboravite napraviti formulu niza pritiskom tipki Ctrl + Shift + Enter zajedno.
Za Excel 365 i 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( cell , SEQUENCE(LEN( cell 1) *1), MID ( cell , SEQUENCE(LEN( cell )), 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 tekstualni znakovi se zadržavaju:
Kao što je prikazano na gornjoj snimci zaslona, formula uklanja numeričke znakove s bilo koje pozicije u nizu: na početku, na kraju i u sredini. Međutim, postoji upozorenje: ako niz počinje brojem nakon kojeg slijedi razmak , taj se razmak zadržava, što stvara problem vodećih razmaka (kao u B2).
Da biste se riješili dodatnih razmaka prije teksta , zamotajte formulu u funkciju TRIM ovako:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Sada su vaši rezultati apsolutno savršeni!
Kako ova formula radi:
U biti, formula radi isto kao što je objašnjeno u prethodnom primjeru. Razlika je u tome što iz konačnog niza koji se poslužuje funkciji TEXTJOIN trebate ukloniti brojeve, a ne tekst. Da bismo to učinili, koristimo kombinaciju funkcija IF i ISERROR.
Kao što se sjećate,MID(…)+0 generira niz brojeva i #VALUE! pogreš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 pogreške i prosljeđuje dobiveni 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 (pogrešku), ona umeće odgovarajući tekstualni znak u obrađeno polje 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 prosljeđuje se TEXTJOIN-u, tako da spaja tekstualne znakove i ispisuje rezultat.
Prilagođena funkcija za uklanjanje brojeva iz teksta
Rješenje radi za sve verzije programa Excel
Imajući na umu da treba zadržati robusnu formulu jednostavno, podijelit ću kôd korisnički definirane funkcije (UDF) za uklanjanje svih numeričkih znakova.
VBA kod 1:
Funkcija RemoveNumbers(str As String ) Dim sRes Kao 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 FunctionVBA kod 2:
Funkcija RemoveNumbers(str As String ) Kao niz s CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionKao što je slučaj s funkcijom RemoveText, drugi kod je bolje koristiti u velikaradnih listova za optimizaciju izvedbe.
Nakon što se kôd doda u vašu radnu knjigu, možete ukloniti sve numeričke znakove iz ćelije pomoću ove prilagođene funkcije:
RemoveNumbers(string)U našem slučaju, formula u B2 je:
=RemoveNumbers(A2)
Da biste skratili vodeće razmake ako ih ima, ugniježdite prilagođenu funkciju unutar TRIM kao što biste to učinili s izvornom formulom:
=TRIM(RemoveNumbers(A2))
Podijelite brojeve i tekst u zasebne stupce
U situaciji kada želite razdvojiti tekst i brojeve u dva stupca, bilo bi lijepo da posao obavite s jednom formulom , slažete se? Za ovo samo spajamo kod funkcija RemoveText i RemoveNumbers u jednu funkciju pod nazivom SplitTextNumbers ili jednostavno Split , ili što god želite :)
VBA kod 1:
Funkcija 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 End FunctionVBA code 2:
Function SplitTextNumbers(str As String, is_remove_text As Boolean) Kao niz S 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 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 - uklonite tekst i zadržite brojeve
- FALSE ili 0 - uklonite brojeve i zadržite tekst
Za naš uzorak skupa podataka, formule imaju ovaj oblik:
Za uklanjanje nenumeričkih znakova:
=SplitTextNumbers(A2, TRUE)
Za brisanje numeričkih znakova :
=SplitTextNumbers(A2, FALSE)
Savjet. Kako 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 komplicirati stvari, pokazat ću naš vlastiti način uklanjanja teksta ili brojeva u Excelu.
Pod pretpostavkom da je naš Ultimate Suite dodan vašoj Excel vrpci, ovo ćete učiniti:
- Na kartici Ablebits Data , u grupi Tekst kliknite Ukloni > Ukloni znakove .
Savjet. Ako rezultati sadrže neke vodeće razmake, Trim Spacesalat će ih ukloniti u tren oka.
Ovako možete ukloniti tekst ili numeričke znakove iz niza u programu Excel. Zahvaljujem vam na čitanju i veselim se što ćemo vas vidjeti na našem blogu sljedeći tjedan!
Dostupna preuzimanja
Uklonite tekst ili brojeve u Excelu - primjeri (.xlsm datoteka)
Ultimate Suite - probna verzija (.exe datoteka)