Ynhâldsopjefte
Dizze tutorial sil jo leare hoe't jo tekst skiede kinne fan sifers yn Excel troch native formules en oanpaste funksjes te brûken. Jo sille ek leare hoe't jo tekst en sifers splitse yn twa aparte kolommen.
Stel jo dit foar: jo ûntfange rauwe gegevens foar analyse en fyn út dat nûmers wurde mingd mei tekst yn ien kolom. Yn 'e measte situaasjes sil it grif handiger wêze om se yn aparte kolommen te hawwen foar nauwer ûndersyk.
Yn gefal jo wurkje mei homogene gegevens, kinne jo wierskynlik de funksjes LEFT, RIGHT en MID brûke om de itselde oantal karakters út deselde posysje. Mar dat is in ideaal senario foar laboratoariumtests. Yn it echte libben sille jo it meast wierskynlik omgean mei ûngelikense gegevens wêr't nûmers foar tekst, nei tekst of tusken tekst komme. De ûndersteande foarbylden jouwe oplossings krekt foar dit gefal.
Hoe tekst fuortsmite en sifers yn Excel-sellen hâlde
De oplossing wurket yn Excel 365, Excel 2021 , en Excel 2019
Microsoft Excel 2019 yntrodusearre in pear nije funksjes dy't net beskikber binne yn eardere ferzjes, en wy sille ien fan sokke funksjes brûke, nammentlik TEXTJOIN, om tekstkarakters út in sel te stripjen mei nûmers.
De generike formule is:
TEXTJOIN("", TRUE, IFERROR(MID( sel, ROW(INDIRECT("1:"&LEN( sel))), 1) *1, ""))Yn Excel 365 en 2021 sil dizze ek wurkje:
TEXTJOIN("", TRUE,IFERROR(MID( sel, SEQUENCE(LEN( sel)), 1) *1, ""))Op it earste gesicht kinne de formules in bytsje yntimidearjend útsjen, mar se wurkje wol :)
Om bygelyks tekst út sifers yn A2 te ferwiderjen, fier ien fan 'e ûndersteande formules yn B2 yn, en kopiearje it dan nei safolle sellen as nedich is.
Yn Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
Yn Excel 2019 moat it ynfierd wurde as in arrayformule mei Ctrl + Shift + Enter. Yn dynamyske array Excel wurket it as in normale formule foltôge mei de Enter-kaai.
Yn Excel 365 en 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
As resultaat binne alle teksttekens fuortsmiten fan in sel en sifers wurde bewarre:
Hoe wurket dizze formule:
Om de logika better te begripen, litte wy begjinne te ûndersykjen de formule fan binnen:
Jo brûke of ROW(INDIRECT("1:"&LEN(string))) of SEQUENCE(LEN(string)) om in folchoarder te meitsjen in nûmers dy't oerienkomme mei it totale oantal fan karakters yn de boarne tekenrige, en dan feed dy opienfolgjende nûmers oan de MID funksje as de startnûmers. Yn B2 sjocht dit diel fan 'e formule der sa út:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
De MID-funksje ekstrahearret elk karakter út A2 begjinnend mei de earste en jout se werom as in array:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Dizze array wurdt fermannichfâldige mei 1. Numerike wearden oerlibje sûnder feroaring, wylst it fermannichfâldigjen fan in net-numerike karakter resultearret yn in #VALUE! flater:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
De IFERROR-funksje behanneletdizze flaters en ferfangt se mei lege snaren:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Dizze lêste array wurdt tsjinne oan de TEXTJOIN-funksje, dy't de net-lege wearden yn 'e array ( ignore_empty gearfoeget argumint ynsteld op TRUE) mei in lege tekenrige ("") foar it skiedingsteken:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Tip. Foar Excel 2016 - 2007 bestiet ek in oplossing, mar de formule is folle komplekser. Jo kinne it fine yn dit tutorial: Hoe kinne jo nûmers ekstrahearje yn Excel.
Aanpaste funksje om tekst út sifers te ferwiderjen
De oplossing wurket foar alle Excel-ferzjes
As jo in âldere ferzje fan Excel brûke of de boppesteande formules ek fine dreech te ûnthâlden, neat hinderet jo jo eigen funksje te meitsjen mei in ienfâldiger syntaksis en in brûkerfreonlike namme lykas Tekst fuortsmite . De troch de brûker definieare funksje (UDF) kin op twa manieren skreaun wurde:
VBA-koade 1:
Hjir sjogge wy elk karakter yn 'e boarnestring ien foar ien en kontrolearje oft it numerike is of net. As in nûmer, wurdt it karakter tafoege oan de resultearjende tekenrige.
Funksje RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i , 1)) Dan sRes = sRes & amp; Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA-koade 2:
De koade makket in objekt om in reguliere ekspresje te ferwurkjen. Mei help fan RegExp fuortsmite wy alle tekens oars as sifers 0-9 út de boarne tekenrige.
Funksje RemoveText(str As String ) As String With CreateObject ("VBScript.RegExp") .Global = Wier .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionOp lytse wurkblêden sille beide koades like goed prestearje. Op grutte wurkblêden dêr't de funksje hûnderten of tûzenen kearen neamd wurdt, sil koade 2 dy't VBScript.RegExp brûkt flugger wurkje.
De detaillearre stappen om de koade yn jo wurkboek yn te foegjen kinne jo hjir fine: Hoe VBA ynfoegje koade yn Excel.
Hoefoar oanpak jo ek kieze, út it perspektyf fan ein-brûkers, is de funksje om tekst te wiskjen en sifers te litten sa ienfâldich as dizze:
RemoveText(string)Bygelyks om fuortsmite net-numerike tekens út sel A2, de formule yn B2 is:
=RemoveText(A2)
Kopieer it gewoan yn 'e kolom, en jo krije dit resultaat:
Opmerking. Sawol de native formules as de oanpaste funksje útfiere in numerike tekenrige . Om it yn in getal te feroarjen, fermannichfâldigje it resultaat mei 1, of foegje nul ta, of wrap de formule yn 'e VALUE-funksje. Bygelyks:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Hoe kinne jo nûmers fuortsmite fan tekststring yn Excel
De oplossing wurket yn Excel 365, Excel 2021 en Excel 2019
De formules om sifers fan in alfanumerike tekenrige te ferwiderjen binne frijwat ferlykber mei dy besprutsen yn it foarige foarbyld.
Foar Excel 365 - 2019:
TEXTJOIN(" ", TRUE, IF(ISERR(MID( sel , ROW(INDIRECT("1:"&LEN( sel ) )), 1) *1), MID( sel , ROW(INDIRECT("1:"&LEN( sel ))), 1), ""))Yn Excel 2019, tink om it in arrayformule te meitsjen troch tegearre op de Ctrl + Shift + Enter-toetsen te drukken.
Foar Excel 365 en 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( sel , SEQUENCE(LEN( sel 1) *1), MID ( sel , SEQUENCE(LEN( sel )), 1), ""))Om bygelyks nûmers út in tekenrige yn A2 te stripjen, is de formule:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Of
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
As resultaat wurde alle nûmers út in sel fuortsmiten en tekstkarakters wurde bewarre:
Lykas werjûn yn it skermôfbylding hjirboppe, de formule stript numerike tekens fan elke posysje yn in tekenrige: yn it begjin, oan 'e ein, en yn' e midden. D'r is lykwols in warskôging: as in tekenrige begjint mei in nûmer folge troch in spaasje , dy romte wurdt behâlden, wat in probleem fan liedende spaasjes produsearret (lykas yn B2).
Om ekstra spaasjes foar tekst kwyt te reitsjen , wrap de formule yn 'e TRIM-funksje sa:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
No, jo resultaten binne absolút perfekt!
Hoe wurket dizze formule:
Yn essinsje wurket de formule itselde as útlein yn it foarige foarbyld. It ferskil is dat, fan 'e definitive array tsjinne oan' e TEXTJOIN-funksje, jo nûmers moatte fuortsmite, net tekst. Om it dien te meitsjen, brûke wy de kombinaasje fan IF- en ISERROR-funksjes.
As jo jo ûnthâlde,MID(...)+0 genereart in array fan nûmers en #VALUE! flaters dy't teksttekens op deselde posysjes fertsjintwurdigje:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
De ISERROR-funksje fangt de flaters op en jout de resultearjende array fan Booleaanske wearden troch oan IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
As de IF-funksje TRUE sjocht (in flater), foegje it byhearrende tekstkarakter yn 'e ferwurke array yn mei help fan in oare MID-funksje. As de IF-funksje FALSE (in getal) sjocht, ferfangt it it mei in lege tekenrige:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Dizze lêste rige wurdt trochjûn oan TEXTJOIN, sadat it de tekstkarakters gearfoeget en de resultaat.
Aanpaste funksje om sifers út tekst te ferwiderjen
De oplossing wurket foar alle Excel-ferzjes
Hâld der rekken mei dat in robúste formule bewarre wurde moat ienfâldich, ik sil de koade fan de troch de brûker definieare funksje (UDF) diele om elk numerike karakter te strippen.
VBA-koade 1:
Funksje RemoveNumbers(str As String ) Dim sRes As String sRes = "" Foar i = 1 To Len (str) As False = IsNumeric (Mid (str, i, 1)) Dan sRes = sRes & amp; Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionVBA code 2:
Function RemoveNumbers(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = Wier .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) Ein mei einfunksjeLykas it gefal is mei de funksje RemoveText, is de twadde koade better om te brûken yn grutwurkblêden om de prestaasjes te optimalisearjen.
As de koade oan jo wurkboek tafoege is, kinne jo alle numerike tekens út in sel fuortsmite mei dizze oanpaste funksje:
RemoveNumbers(string)Yn ús gefal, de formule yn B2 is:
=RemoveNumbers(A2)
Om foaroansteande spaasjes as ien te trimmen, nêst de oanpaste funksje yn TRIM lykas jo in native formule soene:
=TRIM(RemoveNumbers(A2))
Slide sifers en tekst yn aparte kolommen
Yn situaasje as jo tekst en sifers skiede wolle yn twa kolommen, soe it moai wêze om it wurk dien te hawwen mei ien formule , oerienkomme? Hjirfoar fusearje wy gewoan de koade fan de funksjes RemoveText en RemoveNumbers yn ien funksje, mei de namme SplitTextNumbers , of gewoan Split , of wat jo wolle :)
VBA-koade 1:
Funksje SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" Foar i = 1 To Len (str) sCurChar = Mid (str, i, 1) As Wier = IsNumeric (sCurChar) Dan sNum = sNum & amp; sCurChar Else sText = sTekst & amp; sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End FunctionVBA-koade 2:
Funksje SplitTextNumbers(str As String )_text As_remove Mei CreateObject ("VBScript.RegExp") .Global = Wier As Wier = is_remove_text Dan .Pattern = "[^0-9]" Oars.Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "") Einigje mei einfunksjeUs nije oanpaste funksje fereasket twa arguminten:
SplitTextNumbers(string, is_remove_text)Wêr is_remove_text is in Booleaanske wearde dy't oanjout hokker karakters te strippen:
- TRUE of 1 - fuortsmite tekst en hâld sifers
- FALSE of 0 - fuortsmite sifers en hâld tekst
Foar ús foarbyldgegevensset hawwe de formules dizze foarm:
Om net-numerike tekens te ferwiderjen:
=SplitTextNumbers(A2, TRUE)
Om numerike tekens te wiskjen :
=SplitTextNumbers(A2, FALSE)
Tip. Om in potinsjele probleem fan liedende spaasjes te foarkommen, advisearje ik altyd de formule te wikkeljen dy't sifers ferwideret yn 'e TRIM-funksje:
=TRIM(SplitTextNumbers(A2, FALSE))
Spesjaal ark om sifers of tekst te ferwiderjen
Foar dyjingen dy't dat dogge net leuk om dingen ûnnedich komplisearje te litten, ik sil ús eigen manier sjen litte om tekst of sifers yn Excel te ferwiderjen.
Ungeande fan ús Ultimate Suite wurdt tafoege oan jo Excel-lint, dit is wat jo dogge:
- Op de Ablebits Data ljepper, yn de Tekst groep, klikje op Fuortsmite > Tekens fuortsmite .
Tip. As de resultaten befetsje guon liedende spaasjes, de Trim Spacestool sil elimineren se yn gjin tiid.
Sa kinne jo tekst of numerike tekens fan in tekenrige yn Excel fuortsmite. Ik tankje jo foar it lêzen en sjoch út nei jo nije wike op ús blog!
Beskikbere downloads
Tekst of sifers fuortsmite yn Excel - foarbylden (.xlsm-bestân)
Ultimate Suite - proefferzje (.exe-bestân)