Tabl cynnwys
Bydd y tiwtorial hwn yn eich dysgu sut i wahanu testun oddi wrth rifau yn Excel drwy ddefnyddio fformiwlâu brodorol a swyddogaethau personol. Byddwch hefyd yn dysgu sut i rannu testun a rhifau yn ddwy golofn ar wahân.
Dychmygwch hyn: rydych yn derbyn data crai i'w ddadansoddi ac yn darganfod bod rhifau'n gymysg â thestun mewn un golofn. Yn y rhan fwyaf o sefyllfaoedd, mae'n sicr y bydd yn fwy cyfleus eu cael mewn colofnau ar wahân i'w harchwilio'n fanylach.
Rhag ofn eich bod yn gweithio gyda data homogenaidd, mae'n debyg y gallech ddefnyddio'r ffwythiannau CHWITH, DDE, a CANOLBARTH i echdynnu'r yr un nifer o nodau o'r un safle. Ond mae hynny'n senario delfrydol ar gyfer profion labordy. Mewn bywyd go iawn, rydych yn fwyaf tebygol o ymdrin â data annhebyg lle mae niferoedd yn dod cyn testun, ar ôl testun neu rhwng testun. Mae'r enghreifftiau isod yn darparu atebion yn union ar gyfer yr achos hwn.
Sut i dynnu testun a chadw rhifau yng nghelloedd Excel
Mae'r datrysiad yn gweithio yn Excel 365, Excel 2021 , ac Excel 2019
Cyflwynodd Microsoft Excel 2019 ychydig o swyddogaethau newydd nad ydynt ar gael mewn fersiynau cynharach, ac rydym yn mynd i ddefnyddio un o swyddogaethau o'r fath, sef TEXTJOIN, i dynnu nodau testun o gell yn cynnwys rhifau.
Y fformiwla generig yw:
TEXTJOIN("", TRUE, IFERROR(MID( cell, ROW(INDIRECT( "1:"&LEN(<1)> cell))), 1) * 1, ""))Yn Excel 365 a 2021, bydd yr un hon hefyd yn gweithio:
TEXTJOIN("", TRUE,IFERROR(MID( cell, SEQUENCE(LEN( cell)), 1) *1, ""))Ar yr olwg gyntaf, gall y fformiwlâu edrych braidd yn frawychus, ond maen nhw'n gweithio :)
Er enghraifft, i dynnu testun o rifau yn A2, rhowch un o'r fformiwlâu isod yn B2, ac yna ei gopïo i lawr i gynifer o gelloedd ag sydd angen.
Yn Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
Yn Excel 2019, rhaid ei nodi fel fformiwla arae gyda Ctrl + Shift + Enter . Yn arae ddeinamig Excel, mae'n gweithio fel fformiwla arferol wedi'i chwblhau gyda'r allwedd Enter.
Yn Excel 365 a 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
O ganlyniad, mae holl nodau'r testun yn tynnu o gell a rhifau yn cael eu cadw:
Sut mae'r fformiwla hon yn gweithio:
I ddeall y rhesymeg yn well, gadewch i ni ddechrau ymchwilio y fformiwla o'r tu mewn:
Rydych yn defnyddio naill ai ROW(INDIRECT("1:"&LEN(string))) neu SEQUENCE(LEN(string)) i greu dilyniant rhifau sy'n cyfateb i'r cyfanswm o nodau yn y llinyn ffynhonnell, ac yna bwydo'r rhifau dilyniannol hynny i'r swyddogaeth MID fel y rhifau cychwyn. Yn B2, mae'r rhan hon o'r fformiwla yn edrych fel a ganlyn:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Mae'r ffwythiant MID yn echdynnu pob nod o A2 gan ddechrau gyda'r un cyntaf un ac yn eu dychwelyd fel arae:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Mae'r arae hon yn cael ei lluosi ag 1. Mae gwerthoedd rhifol yn goroesi heb unrhyw newid, tra bod lluosi nod di-rhifol yn arwain at #VALUE! gwall:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Mae'r ffwythiant IFERROR yn ymdriny gwallau hyn ac yn rhoi llinynnau gwag yn eu lle:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Mae'r arae olaf hon yn cael ei gwasanaethu i'r ffwythiant TEXTJOIN, sy'n cydgadu'r gwerthoedd nad ydynt yn wag yn yr arae ( anwybyddu_gwag arg wedi'i osod i WIR) gan ddefnyddio llinyn gwag ("") ar gyfer y amffinydd:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Awgrym. Ar gyfer Excel 2016 - 2007, mae datrysiad hefyd yn bodoli, ond mae'r fformiwla yn llawer mwy cymhleth. Gallwch ddod o hyd iddo yn y tiwtorial hwn: Sut i dynnu rhifau yn Excel.
Swyddogaeth cwsmer i dynnu testun o rifau
Mae'r datrysiad yn gweithio ar gyfer pob fersiwn Excel
Os ydych yn defnyddio fersiwn hŷn o Excel neu dewch o hyd i'r fformiwlâu uchod hefyd anodd cofio, nid oes dim yn eich atal rhag creu eich swyddogaeth eich hun gyda chystrawen symlach ac enw hawdd ei ddefnyddio fel RemoveText . Gellir ysgrifennu'r ffwythiant a ddiffinnir gan y defnyddiwr (UDF) mewn dwy ffordd:
Cod VBA 1:
Yma, edrychwn ar bob nod yn y llinyn ffynhonnell fesul un un a gwirio a yw'n rhifol ai peidio. Os yn rhif, mae'r nod yn cael ei ychwanegu at y llinyn canlyniadol.
Swyddogaeth RemoveText(str Fel Llinyn ) Dim sRes Fel Llinyn sRes = " " Ar gyfer i = 1 I Len(str) Os Gwir = IsNumeric(Mid(str, i , 1)) Yna sRes = sRes & Mid(str, i, 1) Diwedd Os Nesaf i RemoveText = sRes Diwedd SwyddogaethCod VBA 2:
Mae'r cod yn creu gwrthrych i brosesu mynegiant rheolaidd. Gan ddefnyddio RegExp, rydym yn tynnu pob nod heblaw digidau 0-9 o'r llinyn ffynhonnell.
Swyddogaeth RemoveText(str Fel Llinyn ) Fel Llinyn Gyda CreateObject ( " VBScript.RegExp " ) .Global = Gwir .Pattern = " [^0-9] " RemoveText = .Replace(str, "" ) Diwedd Gyda Swyddogaeth DiweddAr daflenni gwaith bach, bydd y ddau god yn perfformio cystal. Ar daflenni gwaith mawr lle mae'r swyddogaeth yn cael ei galw gannoedd neu filoedd o weithiau, bydd cod 2 sy'n defnyddio VBScript.RegExp yn gweithio'n gyflymach.
Mae'r camau manwl i fewnosod y cod yn eich llyfr gwaith i'w gweld yma: Sut i fewnosod VBA cod yn Excel.
Pa bynnag ddull a ddewiswch, o safbwynt y defnyddiwr terfynol, mae'r swyddogaeth i ddileu testun a gadael rhifau mor syml â hyn:
RemoveText(string)Er enghraifft, i tynnwch nodau anrhifol o gell A2, y fformiwla yn B2 yw:
=RemoveText(A2)
Copïwch ef i lawr y golofn, a byddwch yn cael y canlyniad hwn:
13>
Nodyn. Mae'r fformiwlâu brodorol a'r ffwythiant personol yn allbwn llinyn rhifol . I'w droi'n rhif, lluoswch y canlyniad ag 1, neu ychwanegwch sero, neu amlapiwch y fformiwla yn y ffwythiant VALUE. Er enghraifft:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Sut i dynnu rhifau o'r llinyn testun yn Excel
Mae'r datrysiad yn gweithio yn Excel 365, Excel 2021, ac Excel 2019
Mae'r fformiwlâu i dynnu rhifau o linyn alffaniwmerig yn eithaf tebyg i'r rhai a drafodwyd yn yr enghraifft flaenorol.
Ar gyfer Excel 365 - 2019:
TEXTJOIN(" " , TRUE , IF(ISERR(MID( cell , ROW(INDIRECT("1:" cell ))), 1), ""))Yn Excel 2019, cofiwch ei wneud yn fformiwla arae trwy wasgu'r bysellau Ctrl + Shift + Enter gyda'i gilydd.
Ar gyfer Excel 365 a 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( cell , SEQUENCE(LEN( cell 1) *1), CANOLBARTH ( cell , SEQUENCE(LEN( cell )), 1), ""))Er enghraifft, i dynnu rhifau o linyn yn A2, y fformiwla yw:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Neu
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
O ganlyniad, mae pob rhif yn cael ei dynnu o gell a nodau testun yn cael eu cadw:
14>
Fel y dangosir yn y ciplun uchod, mae'r fformiwla yn tynnu nodau rhifol o unrhyw safle mewn llinyn: yn y dechrau, yn y diwedd, ac yn y canol Fodd bynnag, mae cafeat: os yw llinyn Mae yn dechrau gyda rhif ac yna bwlch , mae'r gofod hwnnw'n cael ei gadw, sy'n creu problem wrth arwain bylchau (fel yn B2).
I gael gwared ar fylchau ychwanegol cyn y testun , lapiwch y fformiwla yn y swyddogaeth TRIM fel hyn:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Nawr, mae eich canlyniadau yn hollol berffaith!
Sut mae'r fformiwla hon yn gweithio:
Yn ei hanfod, mae'r fformiwla'n gweithio yr un peth ag a eglurwyd yn yr enghraifft flaenorol. Y gwahaniaeth yw, o'r arae olaf a wasanaethir i swyddogaeth TEXTJOIN, mae angen i chi dynnu rhifau, nid testun. Er mwyn ei wneud, rydym yn defnyddio'r cyfuniad o swyddogaethau IF ac ISERROR.
Fel y cofiwch,Mae MID(…)+0 yn cynhyrchu amrywiaeth o rifau a #VALUE! gwallau sy'n cynrychioli nodau testun yn yr un safleoedd:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Mae'r ffwythiant ISERROR yn dal y gwallau ac yn trosglwyddo'r casgliad canlyniadol o werthoedd Boole i IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Pan fydd swyddogaeth IF yn gweld TRUE (gwall), mae'n mewnosod y nod testun cyfatebol yn yr arae wedi'i brosesu gyda chymorth swyddogaeth MID arall. Pan fydd ffwythiant IF yn gweld ANGHYWIR (rhif), mae'n rhoi llinyn gwag yn ei le:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Mae'r arae olaf yma'n cael ei drosglwyddo i TEXTJOIN, felly mae'n cydgatenu nodau'r testun ac yn allbynnu'r canlyniad.
Swyddogaeth cwsmer i dynnu rhifau o'r testun
Mae'r datrysiad yn gweithio ar gyfer pob fersiwn Excel
Gan gadw mewn cof y dylid cadw fformiwla gadarn syml, byddaf yn rhannu cod y ffwythiant a ddiffinnir gan y defnyddiwr (UDF) i ddileu unrhyw nod rhifol.
Cod VBA 1:
Swyddogaeth DileuNumbers(str Fel Llinyn ) Dim sRes As String sRes = "" Ar gyfer i = 1 I Len(str) Os Gau = IsRhifwm(Canol(str, i, 1)) Yna sRes = sRes & Mid(str, i, 1) Diwedd Os Nesaf i RemoveNumbers = sRes Diwedd SwyddogaethCod VBA 2:
Swyddogaeth RemoveNumbers(str Fel Llinyn ) Fel Llinynnol Gyda CreateObject ( "VBScript.RegExp" ). mawrtaflenni gwaith i wneud y gorau o'r perfformiad.Unwaith y bydd y cod wedi'i ychwanegu at eich llyfr gwaith, gallwch dynnu'r holl nodau rhifol o gell gan ddefnyddio'r ffwythiant personol hwn:
RemoveNumbers(string)Yn ein hachos ni, y fformiwla yn B2 yw:
=RemoveNumbers(A2)
I docio bylchau arweiniol os o gwbl, nythu'r ffwythiant personol y tu mewn i TRIM fel y byddech chi'n fformiwla frodorol:
=TRIM(RemoveNumbers(A2))
Rhannu rhifau a thestun yn golofnau ar wahân
Mewn sefyllfa pan fyddwch am wahanu testun a rhifau yn ddwy golofn, byddai'n braf cael un fformiwla i wneud y dasg , cytuno? Ar gyfer hyn, rydym yn uno cod y ffwythiannau RemoveText a RemoveNumbers i mewn i un swyddogaeth, a enwir SplitTextNumbers , neu yn syml Split , neu beth bynnag yr hoffech :)
Cod VBA 1:
Swyddogaeth SplitTextNumbers(str Fel Llinyn , is_remove_text Fel Boole ) Fel Llinynnol Dim sNum, sText, sChar As String sCurChar = sNum = sText = " Ar gyfer i = 1 I Len(str) sCurChar = Canolbarth(str, i, 1) Os Gwir = IsRhifwm(sCurChar) Yna sNum = sNum & sCurChar Else sText = sText & sCurChar Diwedd Os Nesaf i Os Gwir = is_remove_text Yna SplitTextNumbers = sNum Arall SplitTextNumbers = sText Diwedd Os Diwedd SwyddogaethCod VBA 2:
Swyddogaeth SplitTextNumbers(str Fel Llinyn , is_remove_text Fel Boole ) Fel Llinynnol Gyda CreateObject ( " VBScript.RegExp " ) .Global = Gwir Os Gwir = is_remove_text Yna .Pattern = "[^0-9]" Arall.Pattern = " [0-9] " Diwedd Os SplitTextNumbers = .Replace(str, "" ) Diwedd Gyda Swyddogaeth DiweddMae angen dwy arg ar ein ffwythiant personol newydd:
SplitTextNumbers(llinyn, is_remove_text)Ble Mae is_remove_text yn werth Boole sy'n nodi pa nodau i'w tynnu:
- TRUE neu 1 - tynnwch y testun a chadwch rifau
- FALSE neu 0 - tynnwch rifau a chadwch y testun
Ar gyfer ein set ddata sampl, mae'r fformiwlâu ar y ffurf hon:
I dynnu nodau nad ydynt yn rhifol:
=SplitTextNumbers(A2, TRUE)
I ddileu nodau rhifol :
=SplitTextNumbers(A2, FALSE)
Awgrym. Er mwyn osgoi problem bosibl o ran arwain bylchau, rwy'n argymell lapio'r fformiwla sy'n tynnu rhifau yn y swyddogaeth TRIM bob amser:
=TRIM(SplitTextNumbers(A2, FALSE))
Arf arbennig i dynnu rhifau neu destun
Ar gyfer y rhai sy'n gwneud hynny ddim yn hoffi cymhlethu pethau'n ddiangen, byddaf yn dangos ein ffordd ein hunain o ddileu testun neu rifau yn Excel.
A chymryd bod ein Ultimate Suite yn cael ei ychwanegu at eich rhuban Excel, dyma beth rydych chi'n ei wneud:
- Ar y tab Ablebits Data , yn y grŵp Text , cliciwch Dileu > Dileu Nodau . <21
Awgrym. Os yw'r canlyniadau'n cynnwys rhai mannau blaenllaw, y Trim SpacesBydd yr offeryn yn eu dileu mewn dim o amser.
Dyna sut i dynnu testun neu nodau rhifol o linyn yn Excel. Diolch i chi am ddarllen ac edrychaf ymlaen at eich gweld ar ein blog wythnos nesaf!
Ar gael i'w lawrlwytho
Dileu testun neu rifau yn Excel - enghreifftiau (ffeil .xlsm)
Ultimate Suite - fersiwn prawf (ffeil .exe)