Turinys
Šioje pamokoje sužinosite, kaip "Excel" programoje atskirti tekstą nuo skaičių naudojant vietines formules ir pasirinktines funkcijas. Taip pat sužinosite, kaip padalyti tekstą ir skaičius į du atskirus stulpelius.
Įsivaizduokite: gaunate neapdorotus duomenis analizei ir sužinote, kad viename stulpelyje skaičiai yra sumaišyti su tekstu. Daugeliu atvejų tikrai bus patogiau juos pateikti atskiruose stulpeliuose, kad būtų galima juos atidžiau išnagrinėti.
Jei dirbate su vienarūšiais duomenimis, tikriausiai galėtumėte naudoti LEFT, RIGHT ir MID funkcijas, kad iš tos pačios pozicijos išgautumėte tą patį simbolių skaičių. Tačiau tai idealus scenarijus laboratoriniams tyrimams. Realiame gyvenime greičiausiai susidursite su nevienodais duomenimis, kai skaičiai yra prieš tekstą, po teksto arba tarp teksto. Toliau pateiktuose pavyzdžiuose pateikiami būtent tokie sprendimai.atveju.
Kaip "Excel" ląstelėse pašalinti tekstą ir išsaugoti skaičius
Sprendimas veikia "Excel 365", "Excel 2021" ir "Excel 2019".
"Microsoft Excel 2019" įdiegė keletą naujų funkcijų, kurių nebuvo ankstesnėse versijose, ir mes naudosime vieną iš tokių funkcijų, būtent TEXTJOIN, norėdami pašalinti teksto simbolius iš ląstelės, kurioje yra skaičių.
Bendroji formulė yra tokia:
TEXTJOIN("", TRUE, IFERROR(MID( ląstelė , ROW(INDIRECT("1:"&LEN( ląstelė ))), 1) *1, ""))Šis veiks ir "Excel 365" bei 2021 programoje:
TEXTJOIN("", TRUE, IFERROR(MID( ląstelė , SEKA(LEN( ląstelė )), 1) *1, ""))Iš pirmo žvilgsnio formulės gali atrodyti šiek tiek bauginančios, tačiau jos tikrai veikia :)
Pavyzdžiui, norėdami pašalinti tekstą iš skaičių, esančių A2, įveskite vieną iš toliau pateiktų formulių B2 ir nukopijuokite ją į tiek ląstelių, kiek reikia.
Programoje "Excel 365" - 2019 m:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1, ""))
Programoje "Excel 2019" ji turi būti įvesta kaip masyvo formulė, naudojant Ctrl + Shift + Enter . Programoje "Excel" dinaminis masyvas veikia kaip įprasta formulė, užbaigiama klavišu Enter.
"Excel 365" ir 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, "")))
Dėl to iš ląstelės pašalinami visi teksto simboliai, o skaičiai paliekami:
Kaip veikia ši formulė:
Kad geriau suprastume logiką, pradėkime nagrinėti formulę iš vidaus:
Naudodami ROW(INDIRECT("1:"&LEN(string))) arba SEQUENCE(LEN(string)) sukursite skaičių seką, atitinkančią bendrą simbolių skaičių pradinėje eilutėje, ir tada šiuos eilės numerius kaip pradinius numerius pateiksite MID funkcijai. B2 versijoje ši formulės dalis atrodo taip:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Funkcija MID iš A2 ištraukia kiekvieną simbolį, pradedant pačiu pirmuoju, ir grąžina juos kaip masyvą:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Šis masyvas dauginamas iš 1. Skaitmeninės reikšmės išlieka nepakitusios, o dauginant neskaitmeninį simbolį gaunama #VALUE! klaida:
{2;1;0;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!}
Funkcija IFERROR tvarko šias klaidas ir pakeičia jas tuščiomis eilutėmis:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Šis galutinis masyvas pateikiamas TEXTJOIN funkcijai, kuri sujungia ne tuščias masyvo reikšmes ( ignore_empty argumentas TRUE), o kaip skiriamąjį ženklą naudokite tuščią eilutę (""):
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Patarimas. 2016-2007 m. "Excel" programai taip pat yra sprendimas, tačiau formulė yra kur kas sudėtingesnė. Ją rasite šioje pamokoje: Kaip išgauti skaičius "Excel" programoje.
Pasirinktinė funkcija, skirta pašalinti tekstą iš skaičių
Sprendimas tinka visoms "Excel" versijoms
Jei naudojate senesnę "Excel" versiją arba jums atrodo, kad minėtas formules per sunku įsiminti, niekas netrukdo sukurti savo funkciją su paprastesne sintakse ir patogiu pavadinimu, pvz. RemoveText . Naudotojo apibrėžtą funkciją (UDF) galima užrašyti dviem būdais:
VBA kodas 1:
Čia paeiliui peržiūrime kiekvieną pradinės eilutės simbolį ir patikriname, ar jis yra skaitinis, ar ne. Jei jis skaitinis, simbolis pridedamas prie gautos eilutės.
Funkcija 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 kodas 2:
Kodas sukuria objektą reguliariajai išraiškai apdoroti. Naudodami RegExp iš pradinės eilutės pašaliname visus simbolius, išskyrus skaitmenis 0-9.
Funkcija RemoveText(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionMažuose darbalapiuose abu kodai veiks vienodai gerai. Dideliuose darbalapiuose, kuriuose funkcija iškviečiama šimtus ar tūkstančius kartų, 2 kodas, kuriame naudojamas VBScript.RegExp, veiks greičiau.
Išsamius kodo įterpimo į darbaknygę žingsnius rasite čia: Kaip įterpti VBA kodą į "Excel".
Kad ir kokį būdą pasirinktumėte, galutinio naudotojo požiūriu, teksto ištrynimo ir skaičių palikimo funkcija yra labai paprasta:
RemoveText(eilutė)Pavyzdžiui, norint iš ląstelės A2 pašalinti neskaitmeninius simbolius, B2 formulė yra tokia:
=Pašalinti tekstą(A2)
Tiesiog nukopijuokite jį į stulpelį ir gausite šį rezultatą:
Pastaba. Tiek vietinės formulės, tiek pasirinktinė funkcija išveda a skaitmeninė eilutė . Norėdami paversti ją skaičiumi, padauginkite rezultatą iš 1 arba pridėkite nulį, arba formulę įtraukite į funkciją VALUE. Pvz:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Kaip pašalinti skaičius iš teksto eilutės "Excel" programoje
Sprendimas veikia "Excel 365", "Excel 2021" ir "Excel 2019".
Formulės, kuriomis iš raidžių ir skaičių eilutės pašalinami skaičiai, yra labai panašios į tas, kurios aptartos ankstesniame pavyzdyje.
"Excel 365" - 2019 m:
TEXTJOIN("", TRUE, IF(ISERR(MID( ląstelė , ROW(INDIRECT("1:"&LEN( ląstelė ) )), 1) *1), MID( ląstelė , ROW(INDIRECT("1:"&LEN( ląstelė ))), 1), ""))Programoje "Excel 2019" nepamirškite masyvo formulė kartu paspausdami klavišus Ctrl + Shift + Enter.
"Excel 365" ir 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( ląstelė , SEKA(LEN( ląstelė 1) *1), MID( ląstelė , SEKA(LEN( ląstelė )), 1), ""))Pavyzdžiui, jei norite iš A2 eilutės pašalinti skaičius, formulė yra tokia:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), "")))
Arba
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Dėl to iš ląstelės pašalinami visi skaičiai, o teksto simboliai paliekami:
Kaip parodyta pirmiau pateiktame paveikslėlyje, formulė pašalina skaitmeninius simbolius iš bet kurios eilutės vietos: pradžios, pabaigos ir vidurio. Tačiau yra išlyga: jei eilutė prasideda skaičiumi, po kurio rašomas tarpas. , tas tarpas paliekamas, todėl kyla pradinių tarpų problema (kaip B2).
Norėdami atsikratyti papildomų tarpai prieš tekstą , formulę į TRIM funkciją įtraukite taip:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEKA(LEN(A2)), 1) *1), MID(A2, SEKA(LEN(A2)), 1), "")))))
Dabar jūsų rezultatai yra visiškai puikūs!
Kaip veikia ši formulė:
Iš esmės formulė veikia taip pat, kaip paaiškinta ankstesniame pavyzdyje. Skirtumas tas, kad iš galutinio masyvo, paduodamo funkcijai TEXTJOIN, reikia pašalinti skaičius, o ne tekstą. Kad tai būtų padaryta, naudojame funkcijų IF ir ISERROR derinį.
Kaip prisimenate, MID(...)+0 generuoja skaičių ir #VALUE! klaidų, žyminčių teksto simbolius tose pačiose pozicijose, masyvą:
{2;1;0;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!;#VERTĖ!}
Funkcija ISERROR fiksuoja klaidas ir gautą loginių reikšmių masyvą perduoda funkcijai IF:
{FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Kai funkcija IF mato TRUE (klaidą), ji, naudodama kitą funkciją MID, į apdorotą masyvą įterpia atitinkamą teksto simbolį. Kai funkcija IF mato FALSE (skaičių), ji jį pakeičia tuščia eilute:
{"";"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";""; "R"; "o"; "a"; "d"}
Šis galutinis masyvas perduodamas TEXTJOIN, kad jis sujungtų teksto simbolius ir išvestų rezultatą.
Pasirinktinė funkcija, skirta pašalinti skaičius iš teksto
Sprendimas tinka visoms "Excel" versijoms
Atsižvelgdamas į tai, kad patikima formulė turi būti paprasta, pasidalysiu naudotojo apibrėžtos funkcijos (UDF) kodu, kad būtų pašalintas bet koks skaitinis simbolis.
VBA kodas 1:
Funkcija RemoveNumbers(str As String ) Dim sRes As 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 kodas 2:
Funkcija RemoveNumbers(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionKaip ir funkcijos RemoveText atveju, antrąjį kodą geriau naudoti dideliuose darbalapiuose, kad būtų optimizuotas našumas.
Kai kodas bus įtrauktas į sąsiuvinį, naudodami šią pasirinktinę funkciją galėsite iš ląstelės pašalinti visus skaitinius simbolius:
RemoveNumbers(string)Mūsų atveju B2 formulė yra tokia:
=Pašalinti skaičius(A2)
Norėdami apkarpyti pradinius tarpus, jei tokių yra, įterpkite pasirinktinę funkciją į TRIM, kaip tai darytumėte gimtojoje formulėje:
=TRIM(RemoveNumbers(A2))
Skaičių ir teksto skaidymas į atskirus stulpelius
Jei norite atskirti tekstą ir skaičius į du stulpelius, būtų gerai, jei šį darbą atliktumėte naudodami vieną formulę, sutinkate? Šiuo tikslu tiesiog sujungiame kodo RemoveText ir RemoveNumbers funkcijas į vieną funkciją, pavadintą SplitTextNumbers arba tiesiog Splitas arba kaip jums patinka :)
VBA kodas 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 If EndFunkcijaVBA kodas 2:
Funkcija 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 FunctionMūsų naujajai pasirinktinei funkcijai reikia dviejų argumentų:
SplitTextNumbers(string, is_remove_text)Kur is_remove_text yra loginė reikšmė, nurodanti, kuriuos simbolius reikia pašalinti:
- TRUE arba 1 - pašalinkite tekstą ir palikite skaičius
- FALSE arba 0 - pašalinti skaičius ir palikti tekstą
Mūsų pavyzdinio duomenų rinkinio formulės yra tokios:
Norėdami pašalinti neįskaitmeninius simbolius:
=SplitTextNumbers(A2, TRUE)
Jei norite ištrinti skaitmeninius simbolius:
=SplitTextNumbers(A2, FALSE)
Patarimas. Kad išvengtumėte galimų pradinių tarpų problemų, rekomenduoju formulę, kurioje šalinami skaičiai, visada apvynioti TRIM funkcija:
=TRIM(SplitTextNumbers(A2, FALSE))
Specialus įrankis skaičiams arba tekstui pašalinti
Tiems, kurie nemėgsta be reikalo komplikuoti dalykų, parodysiu savo būdą, kaip pašalinti tekstą ar skaičius "Excel" programoje.
Darant prielaidą, kad mūsų "Ultimate Suite" pridėta prie "Excel" juostos, atlikite šiuos veiksmus:
- Dėl Ablebitų duomenys skirtuke Tekstas grupę, spustelėkite Pašalinti > Pašalinti simbolius .
Patarimas. Jei rezultatuose yra tarpų, įrankis "Trim Spaces" akimirksniu juos pašalins.
Štai kaip "Excel" programoje iš eilutės pašalinti teksto arba skaitinius simbolius. Dėkoju, kad perskaitėte, ir laukiu jūsų mūsų tinklaraštyje kitą savaitę!
Galimi atsisiuntimai
Teksto arba skaičių pašalinimas "Excel" programoje - pavyzdžiai (.xlsm failas)
"Ultimate Suite" - bandomoji versija (.exe failas)