Sut i dynnu testun neu rifau o gell Excel

  • Rhannu Hwn
Michael Brown

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 Swyddogaeth

    Cod 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 Diwedd

    Ar 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 Swyddogaeth

    Cod 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))

    <0

    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 Swyddogaeth

    Cod 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 Diwedd

    Mae 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:

    1. Ar y tab Ablebits Data , yn y grŵp Text , cliciwch Dileu > Dileu Nodau .
    2. <21

  • Ar cwarel yr ychwanegyn, dewiswch yr ystod ffynhonnell, dewiswch yr opsiwn Dileu setiau nodau , a dewiswch naill ai Testun cymeriadau neu Rhif cymeriadau yn y gwymplen.
  • Citiwch Dileu a mwynhewch y canlyniad :)
  • 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)

    Mae Michael Brown yn frwd dros dechnoleg ymroddedig ac yn frwd dros symleiddio prosesau cymhleth gan ddefnyddio offer meddalwedd. Gyda mwy na degawd o brofiad yn y diwydiant technoleg, mae wedi hogi ei sgiliau yn Microsoft Excel ac Outlook, yn ogystal â Google Sheets a Docs. Mae blog Michael yn ymroddedig i rannu ei wybodaeth a'i arbenigedd ag eraill, gan ddarparu awgrymiadau a thiwtorialau hawdd eu dilyn ar gyfer gwella cynhyrchiant ac effeithlonrwydd. P'un a ydych chi'n weithiwr proffesiynol profiadol neu'n ddechreuwr, mae blog Michael yn cynnig mewnwelediadau gwerthfawr a chyngor ymarferol ar gyfer cael y gorau o'r offer meddalwedd hanfodol hyn.