Excel: Getal ekstrahearje út tekststring

  • Diel Dit
Michael Brown

De tutorial lit sjen hoe't jo nûmer út ferskate tekststrings yn Excel ekstrahearje kinne troch formules en it Extract-ark te brûken.

As it giet om it ekstrahearjen fan in diel fan in tekststring fan in opjûne lingte , Excel biedt trije substringfunksjes (lofts, rjochts en midden) om de taak fluch te behanneljen. As it giet om it ekstrahearjen fan nûmers út in alfanumerike tekenrige, biedt Microsoft Excel ... neat.

Om in nûmer fan in tekenrige yn Excel te krijen, nimt it in bytsje fernimstichheid, in bytsje geduld en in protte ferskillende funksjes yn inoar slein. Of jo kinne it Extract-ark útfiere en it wurk dien hawwe mei in mûsklik. Hjirûnder fine jo folsleine details oer beide metoaden.

    Hoe kinne jo nûmer út 'e ein fan tekststring ekstrahearje

    As jo ​​in kolom hawwe mei alfanumerike snaren wêr't nûmer nei komt tekst, kinne jo de folgjende formule brûke om it te krijen.

    RIGHT( sel, LEN( sel) - MAX(IF(ISNUMBER(MID( sel)>, ROW(INDIRECT("1:"&LEN( sel))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( sel))), 0)))

    Wy sille in bytsje letter op 'e logika fan 'e formule stean. Foar no, ferfange gewoan sel mei in ferwizing nei de sel mei de orizjinele tekenrige (A2 yn ús gefal), en fier de formule yn yn elke lege sel yn deselde rige, sis yn B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))

    Dizze formule krijt allinich nûmer fan 'e ein. As in tekenrige ek nûmers yn it begjin of midden hat, binne senegearre:

    De ekstrahearring wurdt útfierd mei de RIGHT-funksje dy't heart ta de kategory Tekstfunksjes. De útfier fan dizze funksje is altyd tekst . Yn ús gefal is it resultaat in numerike substring , dy't yn termen fan Excel ek tekst is, net nûmer.

    As jo ​​nedich hawwe dat it resultaat in nûmer is. (dy't jo brûke kinne yn fierdere berekkeningen), ferpleatse dan de formule yn 'e WAARDE-funksje of fier in rekenkundige operaasje út dy't it resultaat net feroaret, bygelyks fermannichfâldigje mei 1 of tafoegje 0. Om flaters te fangen yn 'e snaren dy't gjin in befetsje ien nûmer, brûk de funksje IFERROR. Bygelyks:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    of

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")

    Opmerking. Yn Dynamic Array Excel (Office 365 en 2021) ynfiere jo de formule op 'e gewoane manier mei de Enter-kaai. Yn Excel 2019 en earder wurket it allinich as in arrayformule, dus tink om te drukken op Ctrl + Shift + Enter om it te foltôgjen.

    Hoe wurket dizze formule:

    Om nûmer út in alfanumerike tekenrige te heljen, is it earste ding dat jo witte moatte wêr't jo de ekstraksje moatte begjinne. De posysje fan it lêste net-numerike karakter yn in tekenrige wurdt bepaald mei help fan dizze lestige formule:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN( A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))

    Om de logika te begripen, litte wy it fan binnen ûndersiikje :

    De kombinaasje ROW(INDIRECT("1:"&LEN(A2)))makket in folchoarder fan sifers dy't oerienkomme mei it totaal fan tekens yn 'e boarne tekenrige (A2), en wy tsjinje dizze opienfolgjende nûmers oan MID as de startnûmers:

    MID(A2, {1;2;3;4 ;5;6;7;8}, 1)

    De MID-funksje lûkt elk yndividueel karakter fan A2 en jout se werom as in array:

    {"0";"5";" -";"E";"C","-";"0";"1"}

    Omdat MID in tekstfunksje is, is de útfier altyd tekst (sa't jo kinne merke, alle tekens binne ynsletten yn oanhalingstekens). Om numerike te feroarjen yn nûmers, fermannichfâldigje wy de rige mei 1 (dûbele negaasje --MID () sil itselde effekt hawwe). It resultaat fan dizze operaasje is in array fan nûmers en #VALUE! flaters dy't net-numerike tekens fertsjintwurdigje:

    ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})

    De funksje ISNUMBER evaluearret elk elemint fan 'e array en jout syn oardiel yn' e foarm fan Booleaanske wearden - TRUE foar getallen, FALSE foar alles oars:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}

    Dizze array giet nei de logyske test fan de IF-funksje, wêrby't elk elemint fan 'e array wurdt fergelike mei FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    Foar elke FALSE (net-numerike wearde), jout in oare funksje ROW(INDIRECT()) werom syn relative posysje yn 'e snaar. Foar elke TRUE (numerike wearde) wurdt in nul weromjûn. De resultearjende array sjocht der út asfolget:

    {0;0;3;4;5;6;0;0}

    De rest is maklik. De MAX-funksje fynt it heechste nûmer yn 'e boppesteande array, dat is de posysje fan' e lêste net-numerike wearde yn 'e tekenrige (6 yn ús gefal). Simply, subtract dy posysje fan de totale lingte fan de tekenrige weromjûn troch LEN, en jou it resultaat nei RIGHT om it te litten witte hoefolle karakters te ekstrahearje fan de rjochterkant fan de tekenrige:

    RIGHT(A2, LEN (A2) - 6)

    Klear!

    Hoe kinne jo nûmer út it begjin fan tekststring ekstrahearje

    As jo ​​wurkje mei records wêr't tekst nei nûmer stiet, kinne jo helje nûmer út it begjin fan in tekenrige mei dizze generyske formule:

    LEFT( sel, MATCH(FALSE, ISNUMBER(MID( sel, ROW(INDIRECT("1: "&LEN( sel)+1)), 1) *1), 0) -1)

    Mei de oarspronklike tekenrige yn A2, brûk de folgjende formule om nûmer te krijen:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    Hoefolle sifers ek yn it midden of ein steane, allinnich it begjinnûmer wurdt útlutsen:

    Opmerking. Yn Excel 365 en Excel 2021, fanwegen stipe foar dynamyske arrays, wurket in gewoane formule goed. Yn Excel 2019 en earder moatte jo Ctrl + Shift + Enter drukke om it eksplisyt in arrayformule te meitsjen.

    Hoe wurket dizze formule:

    Hjir brûke wy wer de kombinaasje fan ROW, INDIRECT en LEN funksjes om in folchoarder fan nûmers te meitsjen gelyk oan it totaal fan tekens yn 'e boarne tekenrige plus 1 (de rol fan datekstra karakter sil letter dúdlik wurde).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID en ISNUMBER dogge itselde wurk as yn de foarige foarbyld - MID lûkt yndividuele karakters en ISNUMBER konvertearret se nei de logyske wearden. De resultearjende array fan TRUE's en FALSE's giet nei de MATCH-funksje as opsykmatrix:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)

    MATCH berekkent in relative posysje fan 'e earste FALSE, en jout ús de posysje fan it earste net-numerike karakter yn' e tekenrige (3 yn A2). Om de foargeande nûmers te ekstrahearjen, lûke wy 1 fan 'e posysje fan it earste tekstkarakter ôf en tsjinje it ferskil oan it num_chars argumint fan de LEFT-funksje:

    LEFT(A2, 3-1)

    No, werom nei in "ekstra" karakter yn 'e folchoarder generearre troch ROW(INDIRECT()+1)). Sa't jo al witte, jout dizze folchoarder de útgongspunten foar de MID-funksje. Sûnder +1 soe MID krekt safolle tekens ekstrahearje as yn 'e orizjinele tekenrige. As de tekenrige allinnich sifers befettet, sil ISNUMBER allinich TRUE's weromjaan, wylst MATCH op syn minst ien FALSE nedich is. Om dat te garandearjen, foegje wy noch ien karakter ta oan de totale lingte fan 'e tekenrige, dy't de MID-funksje soe omsette yn in lege tekenrige. Bygelyks, yn B7 jout MID dizze array werom:

    {"1";"2";"3";"4";""}

    Opmerking. Lykas it gefal is mei de RIGHT-funksje, jout LEFT ek in numerike weromsubstring , wat technysk tekst is, net nûmer. Om it resultaat as in nûmer te krijen yn stee fan in numerike tekenrige, nêst de formule yn de VALUE-funksje of fermannichfâldigje it resultaat mei 1 lykas werjûn yn it earste foarbyld.

    Hoe kinne jo nûmer krije fan elke posysje yn in tekenrige

    As jo ​​​​taak ymplisearret it ekstrahearjen fan nûmer fan oeral yn in tekenrige, kinne jo gebrûk meitsje fan de folgjende ferrassende formule publisearre op MrExcel-forum:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    Wêr A2 is de orizjinele tekststring.

    Om dizze formule ôf te brekken soe in apart artikel nedich wêze, dus jo kinne it gewoan kopiearje nei jo wurkblêd om te soargjen dat it echt wurket :)

    By it ûndersiikjen fan de resultaten kinne jo lykwols ien ûnbedoeld nadeel fernimme - as de boarnestring gjin nûmer befettet, jout de formule nul werom, lykas yn rige 6 yn 'e skermôfbylding hjirboppe. Om dit te reparearjen, kinne jo de formule yn 'e IF-ferklearring ferpakke, wêrfan de logyske test kontrolearret as de boarnestring in nûmer befettet. As dat sa is, ekstrahearret de formule it nûmer, oars jout in lege tekenrige werom:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Lykas werjûn yn 'e skermprint hjirûnder, wurket de ferbettere formule prachtich (kudos oan Alex, ús Excel-guru, foar dizze ferbettering):

    Oars as yn alle eardere foarbylden is it resultaat fan dizze formule nûmer . Om der wis fan te wêzen, fernimme gewoan de rjochts rjochte wearden yn kolom B en ôfkoarte liedende nullen.

    Tip. Yn Excel 365 -Excel 2019, d'r is in folle ienfâldiger oplossing mei help fan 'e TEXTJOIN-funksje. Sjoch asjebleaft Hoe tekst te ferwiderjen en sifers te behâlden.

    Nûmer út tekststring útpakke mei Ultimate Suite

    Sa't jo krekt sjoen hawwe, is der gjin triviale Excel-formule om nûmer út in tekststring te lûken. As jo ​​swierrichheden hawwe mei it begripen fan de formules of it oanpassen fan se foar jo gegevenssets, kinne jo dizze ienfâldige manier leuk fine om nûmer fan tekenrige yn Excel te krijen.

    Mei ús Ultimate Suite tafoege oan jo Excel-lint, dit is hoe't jo kin it nûmer fluch ophelje fan elke alfanumerike tekenrige:

    1. Gean nei de Ablebits Data ljepper > Tekst groep, en klik op Extract :

    2. Selektearje alle sellen mei de boarnestrings.
    3. Selektearje yn it paniel fan it ark foar it útheljen it radioknop nûmers úthelje .
    4. Ofhinklik fan oft jo wolle dat de resultaten formules of wearden binne, selektearje it fak Foegje as formule of lit it net selektearre (standert).

      Myn advys is om dit fak te selektearjen as jo wolle dat de ekstrahearre nûmers automatysk bywurkje sa gau as der wizigings makke wurde oan de boarnestrings. As jo ​​​​wolle dat de resultaten ûnôfhinklik binne fan 'e orizjinele snaren (bgl

    5. Klik op de knop Resultaten ynfoegje . Dien!

    Lykas yn it foarige foarbyld binne de resultaten fan deekstraksje binne nûmers , wat betsjut dat jo frij binne om dêrmei te tellen, som, gemiddelde of oare berekkeningen út te fieren.

    Yn dit foarbyld hawwe wy der foar keazen om de resultaten yn te foegjen as wearden , en de tafoeging die krekt wêr't om frege waard:

    As it karfakje Ynfoegje as formule selektearre is, dan d observearje in formule yn 'e formulebalke. Nijsgjirrich om te witten hokker? Download gewoan de proef fan Ultimate Suite en sjoch foar josels :)

    Beskikbere downloads

    Excel Extract Number - foarbyldwurkboek (.xlsx-bestân)

    Ultimate Suite - proefferzje (.exe triem)

    Michael Brown is in tawijd technology-entûsjast mei in passy foar it ferienfâldigjen fan komplekse prosessen mei software-ark. Mei mear as in desennium ûnderfining yn 'e tech-yndustry hat hy syn feardigens yn Microsoft Excel en Outlook, lykas Google Blêden en Docs, oanskerpe. Michael's blog is wijd oan it dielen fan syn kennis en ekspertize mei oaren, en biedt maklik te folgjen tips en tutorials foar it ferbetterjen fan produktiviteit en effisjinsje. Oft jo in betûfte profesjonele of in begjinner binne, Michael's blog biedt weardefolle ynsjoch en praktysk advys om it measte út dizze essensjele software-ark te heljen.