Satura rādītājs
Šajā pamācībā uzzināsiet, kā Excel programmā atdalīt tekstu no skaitļiem, izmantojot vietējās formulas un pielāgotās funkcijas. Uzzināsiet arī, kā sadalīt tekstu un skaitļus divās atsevišķās kolonnās.
Iedomājieties šādu situāciju: jūs saņemat neapstrādātus datus analīzei un konstatējat, ka vienā slejā skaitļi ir sajaukti ar tekstu. Vairumā situāciju noteikti būs ērtāk tos izvietot atsevišķās slejās, lai tos varētu rūpīgāk pārbaudīt.
Ja strādājat ar viendabīgiem datiem, jūs, iespējams, varētu izmantot LEFT, RIGHT un MID funkcijas, lai iegūtu vienādu rakstzīmju skaitu no vienas un tās pašas pozīcijas. Taču tas ir ideāls scenārijs laboratorijas testiem. Reālajā dzīvē, visticamāk, jums ir darīšana ar atšķirīgiem datiem, kur skaitļi ir pirms teksta, pēc teksta vai starp tekstiem. Turpmākajos piemēros ir sniegti tieši šādi risinājumi.gadījumā.
Kā noņemt tekstu un saglabāt skaitļus Excel šūnās
Risinājums darbojas lietojumprogrammās Excel 365, Excel 2021 un Excel 2019.
Microsoft Excel 2019 ieviesa dažas jaunas funkcijas, kas nav pieejamas iepriekšējās versijās, un mēs izmantosim vienu no šādām funkcijām, proti, TEXTJOIN, lai noņemtu teksta rakstzīmes no šūnas, kas satur skaitļus.
Vispārīgā formula ir šāda:
TEXTJOIN("", TRUE, IFERROR(MID( šūna , ROW(INDIRECT("1:"&LEN( šūna ))), 1) *1, ""))Arī programmā Excel 365 un 2021 šī programma darbosies:
TEXTJOIN("", TRUE, IFERROR(MID( šūna , SECĪBA(LEN( šūna )), 1) *1, ""))No pirmā acu uzmetiena formulas var šķist nedaudz biedējošas, taču tās darbojas :)
Piemēram, lai noņemtu tekstu no skaitļiem A2, B2 ievadiet vienu no turpmāk minētajām formulām un pēc tam nokopējiet to uz tik daudzām šūnām, cik nepieciešams.
programmā Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1, "")))
Programmā Excel 2019 tas jāievada kā masīva formula, izmantojot Ctrl + Shift + Enter . Dinamiskajā masīvā Excel tas darbojas kā parasta formula, kas pabeigta ar taustiņu Enter.
programmā Excel 365 un 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, "")))
Rezultātā no šūnas tiek izņemtas visas teksta zīmes un saglabāti skaitļi:
Kā šī formula darbojas:
Lai labāk izprastu loģiku, sāksim pētīt formulu no iekšpuses:
Izmantojiet ROW(INDIRECT("1:"&LEN(string))) vai SEQUENCE(LEN(string)), lai izveidotu skaitļu secību, kas atbilst kopējam rakstzīmju skaitam avota virknē, un pēc tam ievadiet šos secīgos skaitļus MID funkcijai kā sākuma skaitļus. B2 versijā šī formulas daļa izskatās šādi:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
MID funkcija izraksta katru A2 rakstzīmi, sākot no pirmās, un atgriež to kā masīvu:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Šis masīvs tiek reizināts ar 1. Skaitliskās vērtības saglabājas bez izmaiņām, bet, reizinot ar neskaitlisko rakstzīmi, tiek pieļauta kļūda #VALUE!:
{2;1;0;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!}
IFERROR funkcija apstrādā šīs kļūdas un aizstāj tās ar tukšām virknēm:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Šis galīgais masīvs tiek iesniegts funkcijai TEXTJOIN, kas apvieno masīva neputīgās vērtības ( ignore_empty arguments ir iestatīts uz TRUE), kā norobežotāju izmantojot tukšu virkni (""):
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Padoms. Excel 2016 - 2007 ir arī risinājums, taču formula ir daudz sarežģītāka. To var atrast šajā pamācībā: Kā iegūt skaitļus programmā Excel.
Pielāgota funkcija, lai no skaitļiem noņemtu tekstu
Risinājums darbojas visās Excel versijās
Ja izmantojat vecāku Excel versiju vai iepriekš minētās formulas jums šķiet pārāk sarežģītas, lai tās atcerētos, nekas netraucē izveidot savu funkciju ar vienkāršāku sintaksi un lietotājam draudzīgāku nosaukumu, piemēram. RemoveText Lietotāja definēto funkciju (UDF) var rakstīt divējādi:
VBA kods 1:
Šeit mēs aplūkojam katru rakstzīmi avota virknē pa vienai un pārbaudām, vai tā ir skaitlis vai nē. Ja tā ir skaitlis, rakstzīme tiek pievienota iegūtajai virknei.
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 kods 2:
Kods izveido objektu regulāras izteiksmes apstrādei. Izmantojot RegExp, no avota virknes tiek noņemtas visas rakstzīmes, izņemot ciparus 0-9.
Funkcija RemoveText(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionMazās darblapās abi kodi darbosies vienlīdz labi. Lielās darblapās, kur funkcija tiek izsaukta simtiem vai tūkstošiem reižu, 2. kods, kas izmanto VBScript.RegExp, darbosies ātrāk.
Sīkāku informāciju par to, kā ievietot kodu darbgrāmatā, var atrast šeit: Kā ievietot VBA kodu programmā Excel.
Neatkarīgi no izvēlētās pieejas, no galalietotāja viedokļa teksta dzēšanas un skaitļu atstāšanas funkcija ir tikpat vienkārša kā šī:
RemoveText(virkne)Piemēram, lai no šūnas A2 noņemtu rakstzīmes, kas nav ciparu zīmes, formula B2 ir šāda:
=RemoveText(A2)
Vienkārši nokopējiet to uz leju pa kolonnu, un iegūsiet šādu rezultātu:
Piezīme. Gan vietējās formulas, gan pielāgotās funkcijas izeja a ciparu virkne Lai to pārvērstu skaitlī, rezultātu reiziniet ar 1 vai pievienojiet nulli, vai arī ietiniet formulu funkcijā VALUE. Piemēram:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Kā noņemt skaitļus no teksta virknes programmā Excel
Risinājums darbojas programmā Excel 365, Excel 2021 un Excel 2019.
Formulas, lai no burtu un ciparu virknes atdalītu ciparus, ir diezgan līdzīgas tām, kas aplūkotas iepriekšējā piemērā.
Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( šūna , ROW(INDIRECT("1:"&LEN( šūna ) )), 1) *1), MID( šūna , ROW(INDIRECT("1:"&LEN( šūna ))), 1), ""))Programmā Excel 2019 atcerieties, ka tas ir masīva formula nospiežot kopā taustiņus Ctrl + Shift + Enter.
Excel 365 un 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( šūna , SECĪBA(LEN( šūna 1) *1), MID( šūna , SECĪBA(LEN( šūna )), 1), ""))Piemēram, lai no A2 rindas atdalītu ciparus, formula ir šāda:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))))
Vai
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))
Rezultātā no šūnas tiek izņemti visi skaitļi un saglabātas teksta zīmes:
Kā redzams iepriekš redzamajā ekrānšāviņa attēlā, formula atņem skaitliskos simbolus no jebkuras virknes pozīcijas: sākumā, beigās un vidū. Tomēr ir brīdinājums: ja virkne sākas ar skaitli, kam seko atstarpe , šī atstarpe tiek saglabāta, un tas rada problēmu ar priekšējām atstarpēm (kā B2).
Lai atbrīvotos no papildu atstarpes pirms teksta , ietiniet formulu TRIM funkcijā šādi:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))))
Tagad jūsu rezultāti ir pilnīgi perfekti!
Kā šī formula darbojas:
Būtībā formula darbojas tāpat, kā paskaidrots iepriekšējā piemērā. Atšķirība ir tāda, ka no galīgā masīva, kas tiek pasniegts funkcijai TEXTJOIN, ir jānoņem skaitļi, nevis teksts. Lai to izdarītu, izmantojam funkciju IF un ISERROR kombināciju.
Kā atceraties, MID(...)+0 ģenerē skaitļu masīvu un #VALUE! kļūdas, kas attēlo teksta rakstzīmes tajās pašās pozīcijās:
{2;1;0;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!;#VĒRTĪBA!}
Funkcija ISERROR fiksē kļūdas un iegūto Būla vērtību masīvu nodod funkcijai IF:
{FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Kad IF funkcija redz TRUE (kļūda), tā ar citas MID funkcijas palīdzību iestarpina attiecīgo teksta rakstzīmi apstrādātajā masīvā. Kad IF funkcija redz FALSE (skaitlis), tā to aizstāj ar tukšu virkni:
{"";"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d"}
Šis galīgais masīvs tiek nodots TEXTJOIN, lai tas apvienotu teksta rakstzīmes un izvadītu rezultātu.
Pielāgota funkcija, lai no teksta noņemtu skaitļus
Risinājums darbojas visās Excel versijās
Paturot prātā, ka stabilai formulai jābūt vienkāršai, es dalīšos ar lietotāja definētās funkcijas (UDF) kodu, lai atdalītu jebkuru ciparu rakstzīmi.
VBA kods 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 kods 2:
Funkcija RemoveNumbers(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End With End FunctionTāpat kā funkcijas RemoveText gadījumā, otro kodu labāk izmantot lielās darblapās, lai optimizētu veiktspēju.
Kad kods ir pievienots darbgrāmatā, varat no šūnas noņemt visas skaitļu zīmes, izmantojot šo pielāgoto funkciju:
RemoveNumbers(virkne)Mūsu gadījumā B2 formula ir šāda:
=Izņemt skaitļus(A2)
Lai apgrieztu priekšējās atstarpes, ja tādas ir, ievietojiet pielāgoto funkciju TRIM, tāpat kā to darītu ar vietējo formulu:
=TRIM(RemoveNumbers(A2))
Skaitļu un teksta sadalīšana atsevišķās kolonnās
Situācijā, kad vēlaties sadalīt tekstu un skaitļus divās kolonnās, būtu jauki, ja šo uzdevumu varētu veikt ar vienu formulu, piekrītat? Šim nolūkam mēs vienkārši apvienojam kodu no formulas RemoveText un RemoveNumbers funkcijas vienā funkcijā ar nosaukumu SplitTextNumbers vai vienkārši Split vai kā jums patīk :)
VBA kods 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 EndFunkcijaVBA kods 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ūsu jaunajai pielāgotajai funkcijai ir nepieciešami divi argumenti:
SplitTextNumbers(string, is_remove_text)Kur is_remove_text ir logaritma vērtība, kas norāda, kuras rakstzīmes atdalīt:
- TRUE vai 1 - noņemt tekstu un saglabāt skaitļus
- FALSE vai 0 - noņemt ciparus un saglabāt tekstu
Mūsu parauga datu kopai formulas ir šādā formā:
Lai noņemtu rakstzīmes, kas nav ciparu zīmes:
=SplitTextNumbers(A2, TRUE)
Lai dzēstu ciparu rakstzīmes:
=SplitTextNumbers(A2, FALSE)
Padoms. Lai izvairītos no iespējamās problēmas ar atstarpēm, es iesaku formulu, kas noņem skaitļus, vienmēr ietīt TRIM funkcijā:
=TRIM(SplitTextNumbers(A2, FALSE))
Īpašs rīks numuru vai teksta noņemšanai
Tiem, kam nepatīk nevajadzīgi sarežģīt lietas, es parādīšu mūsu pašu veidu, kā noņemt tekstu vai skaitļus programmā Excel.
Pieņemot, ka mūsu Ultimate Suite ir pievienots Excel lentē, veiciet šādu darbību:
- Par Ablebits dati cilnē Teksts grupu, noklikšķiniet uz Noņemt > Dzēst rakstzīmes .
Padoms. Ja rezultātos ir dažas sākuma atstarpes, rīks Trim Spaces tās novērsīs vienā mirklī.
Tas ir veids, kā no rindas programmā Excel noņemt teksta vai ciparu rakstzīmes. Paldies, ka izlasījāt, un ar nepacietību gaidīsim jūs mūsu blogā nākamnedēļ!
Pieejamās lejupielādes
Teksta vai skaitļu noņemšana programmā Excel - piemēri (.xlsm fails)
Ultimate Suite - izmēģinājuma versija (.exe fails)