Sisukord
See õpetus õpetab teile, kuidas eraldada Excelis teksti ja numbreid, kasutades originaalvalemeid ja kohandatud funktsioone. Samuti saate teada, kuidas jagada teksti ja numbrid kahte eraldi veergu.
Kujutage ette järgmist: saate analüüsimiseks toorandmed ja avastate, et numbrid on segunenud tekstiga ühes veerus. Enamikus olukordades on kindlasti mugavam, kui need on lähemaks uurimiseks eraldi veergudes.
Juhul, kui töötate homogeensete andmetega, võiksite tõenäoliselt kasutada funktsioone LEFT, RIGHT ja MID, et eraldada sama arvu tähemärke samast kohast. Kuid see on ideaalne stsenaarium laboratoorsete katsete jaoks. Reaalses elus on kõige tõenäolisem, et teil on tegemist erinevate andmetega, kus numbrid on enne teksti, pärast teksti või teksti vahel. Allpool toodud näited pakuvad lahendusi just selleks puhuks.juhtum.
Kuidas eemaldada teksti ja hoida numbreid Exceli lahtrites
Lahendus töötab Excel 365, Excel 2021 ja Excel 2019 keskkonnas.
Microsoft Excel 2019 võttis kasutusele mõned uued funktsioonid, mis ei ole varasemates versioonides saadaval, ja me kasutame ühte sellist funktsiooni, nimelt TEXTJOIN, et eemaldada numbreid sisaldavast lahtrist tekstimärgid.
Üldine valem on:
TEXTJOIN("", TRUE, IFERROR(MID( rakk , ROW(INDIRECT( "1:"&LEN( rakk ))), 1) *1, ""))Excel 365-s ja 2021. aastal töötab ka see:
TEXTJOIN("", TRUE, IFERROR(MID( rakk , SEQUENCE(LEN( rakk )), 1) *1, ""))Esmapilgul võivad need valemid tunduda pisut hirmutavatena, kuid nad töötavad :)
Näiteks, et eemaldada tekst A2 numbritest, sisestage üks allpool esitatud valemitest B2-sse ja kopeerige see seejärel nii paljudesse lahtritesse, kui vaja.
Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, "")))
Excelis 2019 tuleb see sisestada massiivi valemina Ctrl + Shift + Enter . Dünaamilise massiivi Excelis töötab see tavalise valemina, mis täidetakse Enter-klahviga.
Excel 365 ja 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Selle tulemusena eemaldatakse lahtrist kõik tekstimärgid ja säilitatakse numbrid:
Kuidas see valem töötab:
Et loogikat paremini mõista, alustame valemi uurimist seestpoolt:
Kasutage kas ROW(INDIRECT("1:"&LEN(string))) või SEQUENCE(LEN(string)), et luua numbrite jada, mis vastab algse stringi tähemärkide koguarvule, ja seejärel sisestage need järjestikused numbrid algnumbritena funktsioonile MID. B2-s näeb see osa valemist välja järgmiselt:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Funktsioon MID eraldab iga tähemärgi A2-st alates esimesest ja tagastab need massiivi kujul:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
See massiivi korrutatakse 1. Numbrilised väärtused säilivad muutusteta, samas kui mittenumbrilise märgi korrutamine toob kaasa vea #VALUE!:
{2;1;0;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!}
Funktsioon IFERROR tegeleb nende vigadega ja asendab need tühjade stringidega:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
See lõplik massiiv antakse funktsioonile TEXTJOIN, mis ühendab massiivis olevad mittetühjad väärtused ( ignore_empty argument on seatud TRUE), kasutades tühja stringi ("") eraldaja jaoks:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Vihje. Excel 2016 - 2007 jaoks on ka lahendus olemas, kuid valem on palju keerulisem. Selle leiad sellest õpetusest: Kuidas Excelis numbreid ekstraheerida.
Kohandatud funktsioon numbritest teksti eemaldamiseks
Lahendus töötab kõigi Exceli versioonide puhul
Kui te kasutate Exceli vanemat versiooni või leiate, et ülaltoodud valemeid on liiga raske meeles pidada, ei takista miski teid loomast oma funktsiooni, millel on lihtsam süntaks ja kasutajasõbralik nimi, näiteks RemoveText Kasutaja määratud funktsiooni (UDF) saab kirjutada kahel viisil:
VBA-kood 1:
Siin vaatame iga tähemärki lähtekriipsus ükshaaval ja kontrollime, kas see on numbriline või mitte. Kui see on number, siis lisatakse see tähemärk tulemuseks olevale stringile.
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA-kood 2:
Kood loob objekti regulaaravaldise töötlemiseks. Kasutades RegExp, eemaldame kõik muud tähemärgid peale numbrite 0-9 lähtesõnast.
Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionVäikestel töölehtedel töötavad mõlemad koodid võrdselt hästi. Suurtel töölehtedel, kus funktsiooni kutsutakse sadu või tuhandeid kordi, töötab VBScript.RegExp'i kasutav kood 2 kiiremini.
Üksikasjalikud sammud koodi sisestamiseks teie töövihikusse leiate siit: Kuidas sisestada VBA-koodi Excelis.
Ükskõik, millise lähenemisviisi te valite, lõppkasutaja seisukohast on teksti kustutamine ja numbrite jätmine nii lihtne:
RemoveText(string)Näiteks selleks, et eemaldada mitte-numbrilised märgid lahtrist A2, on valem B2-s järgmine:
=RemoveText(A2)
Lihtsalt kopeeri see veergu ja saad selle tulemuse:
Märkus. Nii algupärased valemid kui ka kohandatud funktsiooni väljund on numbriline string Et muuta see arvuks, korrutage tulemus 1ga või lisage nulli või mähkige valem VALUE funktsiooniga. Näiteks:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Kuidas eemaldada numbreid Exceli tekstist stringist
Lahendus töötab Excel 365, Excel 2021 ja Excel 2019 keskkonnas.
Valemid numbrite eemaldamiseks tähtnumbrilisest stringist on üsna sarnased eelmises näites käsitletud valemitega.
Exceli 365 jaoks - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( rakk , ROW(INDIRECT( "1:"&LEN( rakk ) )), 1) *1), MID( rakk , ROW(INDIRECT("1:"&LEN( rakk ))), 1), ""))Excel 2019, mäletage, et see oleks massiivi valem vajutades klahve Ctrl + Shift + Enter koos.
Excel 365 ja 2021 jaoks:
TEXTJOIN("", TRUE, IF(ISERROR(MID( rakk , SEQUENCE(LEN( rakk 1) *1), MID( rakk , SEQUENCE(LEN( rakk )), 1), ""))Näiteks, et eemaldada numbreid stringist A2, on valem:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2)))), 1), ""))
Või
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2))), 1), ""))
Selle tulemusena eemaldatakse lahtrist kõik numbrid ja säilitatakse tekstimärgid:
Nagu on näidatud ülaltoodud ekraanipildil, eemaldab valem numbrilised märgid igast positsioonist stringis: alguses, lõpus ja keskel. Siiski on üks hoiatus: kui string algab numbriga, millele järgneb tühik , et tühik jääb alles, mis tekitab probleemi juhtivate tühikute osas (nagu B2).
Et vabaneda ekstra tühikud enne teksti , mähkige valem TRIM-funktsiooniga järgmiselt:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))
Nüüd, teie tulemused on absoluutselt täiuslikud!
Kuidas see valem töötab:
Sisuliselt töötab valem samamoodi nagu eelmises näites selgitatud. Erinevus on selles, et TEXTJOIN funktsioonile serveeritud lõplikust massiivi tuleb eemaldada numbrid, mitte tekst. Selleks kasutame IF ja ISERROR funktsioonide kombinatsiooni.
Nagu mäletate, MID(...)+0 genereerib numbrite ja #VALUE! vigade massiivi, mis esindavad tekstimärke samadel positsioonidel:
{2;1;0;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!}
Funktsioon ISERROR püüab vead ja edastab saadud booluse väärtuste massiivi IF-ile:
{FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Kui IF-funktsioon näeb TRUE (viga), lisab ta teise MID-funktsiooni abil vastava tekstimärgi töödeldavasse massiivi. Kui IF-funktsioon näeb FALSE (number), asendab ta selle tühja stringiga:
{"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d"}
See lõplik massiiv antakse üle TEXTJOINile, nii et see ühendab tekstimärgid ja väljastab tulemuse.
Kohandatud funktsioon numbrite eemaldamiseks tekstist
Lahendus töötab kõigi Exceli versioonide puhul
Pidades silmas, et jõuline valem tuleks hoida lihtsana, jagan kasutajamääratletud funktsiooni (UDF) koodi, et eemaldada kõik numbrilised märgid.
VBA-kood 1:
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumbers(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionVBA-kood 2:
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionNagu ka funktsiooni RemoveText puhul, on teist koodi parem kasutada suurte töölehtede puhul, et optimeerida jõudlust.
Kui kood on lisatud teie töövihikusse, saate selle kohandatud funktsiooni abil eemaldada kõik numbrilised märgid lahtrist:
RemoveNumbers(string)Meie puhul on valem B2:
=RemoveNumbers(A2)
Et kärpida juhtivaid tühikuid, kui neid on, pesitsege kohandatud funktsioon TRIM-i sees nagu emakeelse valemi puhul:
=TRIM(RemoveNumbers(A2))
Jagage numbrid ja tekst eraldi veergudeks
Olukorras, kus soovite teksti ja numbreid eraldada kahte veergu, oleks tore, kui see töö oleks tehtud ühe valemiga, nõustute? Selleks liidame lihtsalt koodiga RemoveText ja RemoveNumbers funktsioonid üheks funktsiooniks, mille nimi on SplitTextNumbers või lihtsalt Jagatud , või mida iganes sa soovid :)
VBA-kood 1:
Function 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 if If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End If End EndFunktsioonVBA-kood 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With 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 With End FunctionMeie uus kohandatud funktsioon vajab kahte argumenti:
SplitTextNumbers(string, is_remove_text)Kus is_remove_text on boolilik väärtus, mis näitab, milliseid märke eemaldada:
- TRUE või 1 - eemaldatakse tekst ja säilitatakse numbrid
- FALSE või 0 - numbrite eemaldamine ja teksti säilitamine
Meie näidisandmestiku puhul on valemid sellisel kujul:
Mittenumbriliste märkide eemaldamiseks:
=SplitTextNumbers(A2, TRUE)
Numbriliste märkide kustutamine:
=SplitTextNumbers(A2, FALSE)
Vihje. Et vältida võimalikku probleemi juhtivate tühikutega, soovitan alati mähkida valemi, mis eemaldab numbreid TRIM funktsioonis:
=TRIM(SplitTextNumbers(A2, FALSE))
Eriline tööriist numbrite või teksti eemaldamiseks
Neile, kellele ei meeldi asjatult asju keerutada, näitan meie enda viisi teksti või numbrite eemaldamiseks Excelis.
Eeldades, et meie Ultimate Suite on lisatud teie Exceli ribale, siis teete järgmist:
- On Ablebits andmed vahekaardil Tekst rühma, klõpsake Eemaldage > Eemaldage tähemärgid .
Vihje. Kui tulemustes on mõned eesolevad tühikud, siis tööriist Trim Spaces (tühikud kärpida) kõrvaldab need hetkega.
See on, kuidas eemaldada teksti- või numbrimärke stringist Excelis. Tänan teid lugemise eest ja ootan teid järgmisel nädalal meie blogis!
Saadaolevad allalaadimised
Teksti või numbrite eemaldamine Excelis - näited (.xlsm fail)
Ultimate Suite - prooviversioon (.exe fail)