Excel: Onttrek nommer uit teksstring

  • Deel Dit
Michael Brown

Die tutoriaal wys hoe om getal uit verskeie teksstringe in Excel te onttrek deur formules en die Onttrek-nutsding te gebruik.

Wanneer dit kom by die onttrekking van 'n deel van 'n teksstring van 'n gegewe lengte , Excel bied drie substring-funksies (links, regs en middel) om die taak vinnig te hanteer. Wanneer dit kom by die onttrekking van getalle uit 'n alfanumeriese string, verskaf Microsoft Excel... niks.

Om 'n nommer uit 'n string in Excel te kry, verg dit 'n bietjie vindingrykheid, 'n bietjie geduld en 'n klomp verskillende funksies in mekaar nesgemaak. Of jy kan die Extract-instrument laat loop en die werk met 'n muisklik laat doen. Hieronder sal jy volledige besonderhede oor beide metodes vind.

    Hoe om nommer uit die einde van teksstring te onttrek

    Wanneer jy 'n kolom van alfanumeriese stringe het waar nommer na kom teks, kan jy die volgende formule gebruik om dit te kry.

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

    Ons sal 'n bietjie later stilstaan ​​by die formule se logika. Vir nou, vervang eenvoudig sel met 'n verwysing na die sel wat die oorspronklike string bevat (A2 in ons geval), en voer die formule in enige leë sel in dieselfde ry in, sê in B2:

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

    Hierdie formule kry slegs nommer vanaf die einde. As 'n string ook getalle in die begin of middel het, is ditgeïgnoreer:

    Die onttrekking word uitgevoer met die REGTE funksie wat aan die kategorie Teksfunksies behoort. Die uitvoer van hierdie funksie is altyd teks . In ons geval is die resultaat 'n numeriese substring , wat in terme van Excel ook teks is, nie nommer nie.

    As jy nodig het dat die resultaat 'n getal moet wees (wat jy in verdere berekeninge kan gebruik), draai dan die formule in die VALUE-funksie of voer 'n rekenkundige bewerking uit wat nie die resultaat verander nie, sê, vermenigvuldig met 1 of tel 0 by. Om foute in die stringe op te vang wat nie 'n enkele getal, gebruik die IFERROR-funksie. Byvoorbeeld:

    =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, "")

    Let wel. In Dynamic Array Excel (Office 365 en 2021) voer jy die formule op die gewone manier in met die Enter-sleutel. In Excel 2019 en vroeër werk dit net as 'n skikkingsformule, so onthou om Ctrl + Shift + Enter te druk om dit te voltooi.

    Hoe hierdie formule werk:

    Om nommer uit 'n alfanumeriese string te onttrek, is die eerste ding wat jy moet weet waar om die onttrekking te begin. Die posisie van die laaste nie-numeriese karakter in 'n string word bepaal met behulp van hierdie moeilike formule:

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

    Om die logika te verstaan, kom ons ondersoek dit van binne :

    Die ROW(INDIRECT("1:"&LEN(A2))) kombinasieskep 'n reeks getalle wat ooreenstem met die totaal van karakters in die bronstring (A2), en ons bedien hierdie opeenvolgende getalle na MID as die beginnommers:

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

    Die MID-funksie trek elke individuele karakter van A2 af en gee hulle terug as 'n skikking:

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

    Aangesien MID 'n teksfunksie is, is die uitvoer altyd teks (soos jy kan sien, al die karakters word tussen aanhalingstekens ingesluit). Om numeriese ene in getalle te verander, vermenigvuldig ons die skikking met 1 (dubbele ontkenning --MID() sal dieselfde effek hê). Die resultaat van hierdie bewerking is 'n reeks getalle en #WAARDE! foute wat nie-numeriese karakters verteenwoordig:

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

    Die ISNUMBER-funksie evalueer elke element van die skikking en gee sy uitspraak in die vorm van Boole-waardes - WAAR vir getalle, ONWAAR vir enigiets anders:

    {WAAR;WAAR;ONWAAR;ONWAAR;ONWAAR;ONWAAR;WAAR;WAAR}

    Hierdie skikking gaan na die logiese toets van die IF-funksie, waar elke element van die skikking vergelyk word met FALSE:

    IF({WAAR;WAAR;ONWAAR;ONWAAR;ONWAAR;ONWAAR;WAAR ;TRUE}=ONWAAR, RY(INDIREKTE("1:"&LEN(A2))), 0)

    Vir elke ONWAAR (nie-numeriese waarde), gee 'n ander ROW(INDIREKTE())-funksie terug sy relatiewe posisie in die tou. Vir elke WAAR (numeriese waarde), word 'n nul teruggestuur. Die resulterende skikking lyk soosvolg:

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

    Die res is maklik. Die MAX-funksie vind die hoogste getal in die skikking hierbo, wat die posisie is van die laaste nie-numeriese waarde in die string (6 in ons geval). Trek eenvoudig daardie posisie af van die totale lengte van die string wat deur LEN teruggestuur word, en gee die resultaat na REGS om dit te laat weet hoeveel karakters om van die regterkant van die string te onttrek:

    REGS(A2, LEN (A2) - 6)

    Klaar!

    Hoe om nommer uit die begin van teksstring te onttrek

    As jy met rekords werk waar teks na nommer verskyn, kan jy onttrek nommer uit die begin van 'n string deur hierdie generiese formule te gebruik:

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

    Met die oorspronklike string in A2, gebruik die volgende formule om getal te kry:

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

    Maak nie saak hoeveel syfers in die middel of einde is nie, slegs die beginnommer word onttrek:

    Let wel. In Excel 365 en Excel 2021, as gevolg van ondersteuning vir dinamiese skikkings, werk 'n gewone formule goed. In Excel 2019 en vroeër, moet jy Ctrl + Shift + Enter druk om dit eksplisiet 'n skikkingformule te maak.

    Hoe hierdie formule werk:

    Hier gebruik ons ​​weer die kombinasie van ROW, INDIREKTE en LEN funksies om 'n reeks getalle gelyk aan die totaal van karakters in die bronstring plus 1 te skep (die rol van daardieaddisionele karakter sal 'n bietjie later duidelik word).

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

    MIDDEL en ISNUMMER doen dieselfde werk as in die vorige voorbeeld - MID trek individuele karakters en ISNUMBER skakel hulle om na die logiese waardes. Die resulterende skikking van WAAR's en ONWAAR's gaan na die MATCH-funksie as 'n opsoekskikking:

    MATCH(ONWAAR, {WAAR;WAAR;ONWAAR;ONWAAR;ONWAAR;ONWAAR;WAAR;WAAR;ONWAAR}, 0)

    MATCH bereken 'n relatiewe posisie van die eerste ONWAAR, wat vir ons die posisie van die eerste nie-numeriese karakter in die string (3 in A2) gee. Om die voorafgaande getalle te onttrek, trek ons ​​1 van posisie die eerste tekskarakter af en dien die verskil aan die getal_tekens argument van die LINKER-funksie:

    LINKS(A2, 3-1)

    Nou, terug na 'n "ekstra" karakter in die volgorde gegenereer deur ROW(INDIRECT()+1)). Soos u reeds weet, verskaf hierdie volgorde die beginpunte vir die MID-funksie. Sonder +1 sal MID presies soveel karakters onttrek as wat daar in die oorspronklike string is. As die string slegs syfers bevat, sal ISNUMBER slegs WAAR's terugstuur terwyl MATCH ten minste een ONWAAR benodig. Om dit te verseker, voeg ons nog een karakter by die totale lengte van die string, wat die MID-funksie sal omskakel na 'n leë string. Byvoorbeeld, in B7 gee MID hierdie skikking terug:

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

    Let wel. Soos die geval is met die REGS-funksie, gee LEFT ook 'n numeriese terugsubstring , wat tegnies teks is, nie nommer nie. Om die resultaat as 'n getal eerder as 'n numeriese string te kry, nes die formule in die VALUE-funksie of vermenigvuldig die resultaat met 1 soos getoon in die eerste voorbeeld.

    Hoe om getal van enige posisie in 'n string te kry

    As jou taak impliseer om nommer van enige plek in 'n string te onttrek, kan jy gebruik maak van die volgende verbysterende formule wat op MrExcel-forum gepubliseer is:

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

    Waar A2 die oorspronklike teksstring.

    Om hierdie formule af te breek sal 'n aparte artikel vereis, so jy kan dit eenvoudig na jou werkblad kopieer om seker te maak dit werk regtig :)

    Met die ondersoek van die resultate kan jy egter een onbeduidende nadeel opmerk - as die bronstring nie 'n getal bevat nie, gee die formule nul terug, soos in ry 6 in die skermkiekie hierbo. Om dit reg te stel, kan jy die formule in die IF-stelling toevou, waarvan die logiese toets kontroleer of die bronstring enige nommer bevat. Indien wel, onttrek die formule die nommer, anders gee dit 'n leë string terug:

    =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),"")

    Soos in die skermkiekie hieronder getoon, werk die verbeterde formule pragtig (kudos aan Alex, ons Excel-ghoeroe, vir hierdie verbetering):

    Anders as in alle vorige voorbeelde, is die resultaat van hierdie formule getal . Om seker te maak hiervan, let net op die regsbelynde waardes in kolom B en afgekapte voorste nulle.

    Wenk. In Excel 365 -Excel 2019, daar is 'n baie eenvoudiger oplossing met behulp van die TEXTJOIN-funksie. Sien asseblief Hoe om teks te verwyder en nommers te hou.

    Onttrek nommer uit teksstring met Ultimate Suite

    Soos jy sopas gesien het, is daar geen triviale Excel-formule om nommer uit 'n teksstring te trek nie. As jy probleme ondervind om die formules te verstaan ​​of om dit vir jou datastelle aan te pas, sal jy dalk van hierdie eenvoudige manier hou om nommer van string in Excel te kry.

    Met ons Ultimate Suite by jou Excel-lint gevoeg, is dit hoe jy kan nommer vinnig van enige alfanumeriese string afhaal:

    1. Gaan na die Ablebits Data -oortjie > Teks -groep, en klik Uittrek :

    2. Kies alle selle met die bronstringe.
    3. Op die Uittrek-nutsding se paneel, kies die Onttrek getalle -radioknoppie.
    4. Afhangende van of jy wil hê dat die resultate formules of waardes moet wees, kies die Voeg in as formule blokkie of laat dit ongekies (verstek).

      My raad is om hierdie blokkie te kies as jy wil hê dat die onttrekde nommers outomaties moet bywerk sodra enige veranderinge aan die bronstringe gemaak word. As jy wil hê dat die resultate onafhanklik van die oorspronklike stringe moet wees (bv. as jy van plan is om die brondata op 'n later stadium te verwyder), moet dan nie hierdie blokkie kies nie.

    5. Klik op die Voeg resultate in -knoppie. Klaar!

    Soos in die vorige voorbeeld, die resultate van dieonttrekking is getalle , wat beteken dat jy vry is om te tel, som, te gemiddelde of enige ander berekeninge daarmee uit te voer.

    In hierdie voorbeeld het ons gekies om die resultate as <9 in te voeg>waardes , en die byvoeging het presies gedoen waarvoor gevra is:

    As die Voeg in as formule -merkblokkie gekies is, d 'n formule in die formulebalk waarneem. Nuuskierig om te weet watter een? Laai net Ultimate Suite se proeflopie af en sien self :)

    Beskikbare aflaaie

    Excel-uittrekselnommer - voorbeeldwerkboek (.xlsx-lêer)

    Ultimate Suite - proefweergawe (.exe lêer)

    Michael Brown is 'n toegewyde tegnologie-entoesias met 'n passie om komplekse prosesse te vereenvoudig deur sagteware-instrumente te gebruik. Met meer as 'n dekade se ondervinding in die tegnologiebedryf, het hy sy vaardighede in Microsoft Excel en Outlook, sowel as Google Sheets en Docs, opgeskerp. Michael se blog is toegewy daaraan om sy kennis en kundigheid met ander te deel, en verskaf maklik-om-te volg wenke en tutoriale vir die verbetering van produktiwiteit en doeltreffendheid. Of jy nou 'n ervare professionele persoon of 'n beginner is, Michael se blog bied waardevolle insigte en praktiese raad om die meeste uit hierdie noodsaaklike sagteware-nutsmiddels te kry.