Excel: getal uit tekst halen

  • Deel Dit
Michael Brown

De handleiding laat zien hoe u in Excel met behulp van formules en de Extract-tool getallen uit verschillende tekstreeksen kunt halen.

Voor het extraheren van een deel van een tekstreeks van een bepaalde lengte biedt Excel drie Substring-functies (Links, Rechts en Midden) om de taak snel af te handelen. Voor het extraheren van getallen uit een alfanumerieke reeks biedt Microsoft Excel... niets.

Om in Excel een getal uit een tekenreeks te halen, is een beetje vindingrijkheid, een beetje geduld en een heleboel verschillende in elkaar geneste functies nodig. U kunt ook de Extract-tool uitvoeren en de klus met een muisklik klaren. Hieronder vindt u alle details over beide methoden.

    Hoe nummer uit het einde van een tekststring te halen

    Wanneer u een kolom met alfanumerieke tekenreeksen hebt waar nummer na tekst komt, kunt u de volgende formule gebruiken om deze te krijgen.

    RECHT( cel , LEN( cel ) - MAX(ALS(ISNUMBER(MID( cel , ROW(INDIRECT("1:"&LEN( cel )), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( cel ))), 0)))

    We zullen later nader ingaan op de logica van de formule. Voor nu vervangt u gewoon cel met een verwijzing naar de cel met de oorspronkelijke tekenreeks (A2 in ons geval), en voer de formule in een lege cel in dezelfde rij in, bijvoorbeeld 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)))

    Deze formule krijgt alleen getallen aan het eind. Als een string ook getallen in het begin of midden heeft, worden die genegeerd:

    De extractie wordt uitgevoerd met de functie RECHTS, die behoort tot de categorie tekstfuncties. De uitvoer van deze functie is altijd tekst In ons geval is het resultaat een numerieke substring wat in termen van Excel ook tekst is, geen nummer.

    Als het resultaat een nummer (die u in verdere berekeningen kunt gebruiken), dan de formule in de functie WAARDE opnemen of een rekenkundige bewerking uitvoeren die het resultaat niet verandert, bijvoorbeeld vermenigvuldigen met 1 of 0 toevoegen. Om fouten op te vangen in de strings die geen enkel getal bevatten, gebruikt u de functie IFERROR. Bijvoorbeeld:

    =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. In Dynamic Array Excel (Office 365 en 2021) voert u de formule op de gebruikelijke manier in met de Enter-toets. In Excel 2019 en eerder werkt het alleen als een matrixformule, dus vergeet niet op Ctrl + Shift + Enter te drukken om het te voltooien.

    Hoe deze formule werkt:

    Om een getal uit een alfanumerieke tekenreeks te extraheren, moet u eerst weten waar u moet beginnen met extraheren. De positie van het laatste niet-numerieke teken in een tekenreeks wordt bepaald met behulp van deze lastige formule:

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

    Om de logica te begrijpen, laten we het van binnenuit onderzoeken:

    De combinatie ROW(INDIRECT("1:"&LEN(A2))) creëert een reeks getallen die overeenstemt met het totaal van de tekens in de bronstring (A2), en we dienen deze opeenvolgende getallen in bij het MID als startnummers:

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

    De MID-functie haalt elk individueel karakter uit A2 en geeft het terug als een array:

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

    Aangezien MID een tekstfunctie is, is de uitvoer ervan altijd tekst (zoals u kunt zien, staan alle tekens tussen aanhalingstekens). Om numerieke enen in getallen te veranderen, vermenigvuldigen we de matrix met 1 (dubbele negatie --MID() heeft hetzelfde effect). Het resultaat van deze bewerking is een matrix van getallen en #VALUE! fouten die niet-numerieke tekens voorstellen:

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

    De functie ISNUMBER evalueert elk element van de array en geeft zijn oordeel in de vorm van Booleaanse waarden - TRUE voor getallen, FALSE voor al het andere:

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

    Deze matrix gaat naar de logische test van de IF-functie, waar elk element van de matrix wordt vergeleken met FALSE:

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

    Voor elke FALSE (niet-numerieke waarde) geeft een andere ROW(INDIRECT()) functie zijn relatieve positie in de string terug. Voor elke TRUE (numerieke waarde) wordt een nul teruggegeven. De resulterende array ziet er als volgt uit:

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

    De rest is eenvoudig. De functie MAX vindt het hoogste getal in de bovenstaande array, dat is de positie van de laatste niet-numerieke waarde in de string (6 in ons geval). Trek die positie af van de totale lengte van de string die door LEN is teruggegeven, en geef het resultaat door aan RIGHT om te laten weten hoeveel tekens er uit de rechterkant van de string moeten worden gehaald:

    RECHTS(A2, LEN(A2) - 6)

    Klaar!

    Hoe nummer uit het begin van een tekststring halen

    Als u werkt met records waarin tekst verschijnt na een nummer, kunt u het nummer extraheren uit het begin van een tekenreeks door deze algemene formule te gebruiken:

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

    Met de oorspronkelijke string in A2, gebruik je de volgende formule om een getal te krijgen:

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

    Het maakt niet uit hoeveel cijfers er in het midden of aan het eind staan, alleen het startnummer wordt eruit gehaald:

    Opmerking. In Excel 365 en Excel 2021, vanwege de ondersteuning voor dynamische matrices, werkt een gewone formule prima. In Excel 2019 en eerder moet u op Ctrl + Shift + Enter drukken om er expliciet een matrixformule .

    Hoe deze formule werkt:

    Ook hier gebruiken we de combinatie van de functies ROW, INDIRECT en LEN om een reeks getallen te maken die gelijk is aan het totaal van de tekens in de bronstring plus 1 (de rol van dat extra teken wordt later duidelijk).

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

    MID en ISNUMBER doen hetzelfde werk als in het vorige voorbeeld - MID haalt individuele tekens op en ISNUMBER zet ze om in logische waarden. De resulterende matrix van TRUE's en FALSE's gaat naar de MATCH-functie als een opzoekmatrix:

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

    MATCH berekent een relatieve positie van de eerste FALSE, wat ons de positie geeft van het eerste niet-numerieke teken in de tekenreeks (3 in A2). Om de voorgaande getallen te extraheren, trekken we 1 af van de positie van het eerste tekstteken en dienen we het verschil toe aan de num_chars argument van de LINKS-functie:

    LINKS(A2, 3-1)

    Nu terug naar een "extra" teken in de sequentie die wordt gegenereerd door ROW(INDIRECT()+1)). Zoals u al weet, levert deze sequentie de uitgangspunten voor de MID-functie. Zonder +1 zou MID precies evenveel tekens extraheren als er in de oorspronkelijke string staan. Als de string alleen getallen bevat, zal ISNUMBER alleen TRUE's opleveren, terwijl MATCH ten minste één FALSE nodig heeft. Om daarvoor te zorgen, voegen we eenmeer karakter aan de totale lengte van de tekenreeks, die de MID-functie zou omzetten in een lege tekenreeks. Bijvoorbeeld, in B7 geeft MID deze matrix terug:

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

    Opmerking. Zoals bij de functie RECHTS, geeft LINKS ook een numerieke substring Om het resultaat als een getal te krijgen in plaats van een numerieke tekenreeks, nestelt u de formule in de functie WAARDE of vermenigvuldigt u het resultaat met 1, zoals in het eerste voorbeeld.

    Hoe krijg je een getal van een willekeurige positie in een string?

    Als uw taak inhoudt dat u een getal uit een willekeurige tekenreeks moet halen, kunt u gebruik maken van de volgende verbijsterende formule, gepubliceerd op het forum van MrExcel:

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

    Waarbij A2 de oorspronkelijke tekststring is.

    Voor het uitwerken van deze formule zou een apart artikel nodig zijn, dus je kunt hem gewoon naar je werkblad kopiëren om er zeker van te zijn dat hij echt werkt :)

    Wanneer u de resultaten bekijkt, zult u echter een onbeduidend nadeel opmerken - als de bronstring geen getal bevat, geeft de formule nul terug, zoals in rij 6 in de bovenstaande schermafbeelding. Om dit op te lossen, kunt u de formule omwikkelen met een IF-instructie, waarvan de logische test controleert of de bronstring een getal bevat. Als dat zo is, haalt de formule het getal eruit, anders geeft de formule een legestring:

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

    Zoals blijkt uit onderstaande schermafbeelding werkt de verbeterde formule prachtig (kudo's aan Alex, onze Excel-goeroe, voor deze verbetering):

    Anders dan in alle voorgaande voorbeelden is het resultaat van deze formule nummer Om hier zeker van te zijn, zie de rechts uitgelijnde waarden in kolom B en de afgeknotte voorloopnullen.

    Tip. In Excel 365 - Excel 2019 is er een veel eenvoudigere oplossing met behulp van de TEXTJOIN-functie. Zie Hoe tekst verwijderen en getallen behouden.

    Nummer uit tekststring halen met Ultimate Suite

    Zoals u zojuist hebt gezien, is er geen triviale Excel-formule om een getal uit een tekststring te halen. Als u moeite hebt om de formules te begrijpen of ze aan te passen aan uw gegevensverzamelingen, vindt u deze eenvoudige manier om een getal uit een tekststring te halen in Excel misschien leuk.

    Met onze Ultimate Suite toegevoegd aan uw Excel-lint, kunt u op deze manier snel een getal ophalen uit een alfanumerieke reeks:

    1. Ga naar de Ablebits gegevens tab> Tekst groep, en klik op Uittreksel :

    2. Selecteer alle cellen met de bronreeksen.
    3. Selecteer in het deelvenster van het Extract-gereedschap de optie Uittreksel nummers keuzerondje.
    4. Afhankelijk van of u wilt dat de resultaten formules of waarden zijn, selecteert u de Invoegen als formule vakje of laat het ongeselecteerd (standaard).

      Mijn advies is om dit vakje aan te vinken als u wilt dat de geëxtraheerde getallen automatisch worden bijgewerkt zodra er wijzigingen worden aangebracht in de bronreeksen. Als u wilt dat de resultaten onafhankelijk zijn van de oorspronkelijke tekenreeksen (bv. voor het geval u van plan bent de brongegevens op een later tijdstip te verwijderen), vink dan dit vakje niet aan.

    5. Klik op de Resultaten invoegen knop. Klaar!

    Net als in het vorige voorbeeld zijn de resultaten van de extractie nummers wat betekent dat u vrij bent om ermee te tellen, op te tellen, te middelen, of andere berekeningen uit te voeren.

    In dit voorbeeld hebben we ervoor gekozen de resultaten in te voegen als waarden en de add-in deed precies wat gevraagd werd:

    Als de Invoegen als formule selectievakje was geselecteerd, zou je een formule Benieuwd welke? Download gewoon de trial van Ultimate Suite en ontdek het zelf :)

    Beschikbare downloads

    Excel Extract Nummer - voorbeeld werkmap (.xlsx bestand)

    Ultimate Suite - proefversie (.exe bestand)

    Michael Brown is een toegewijde technologieliefhebber met een passie voor het vereenvoudigen van complexe processen met behulp van softwaretools. Met meer dan tien jaar ervaring in de technische industrie heeft hij zijn vaardigheden in Microsoft Excel en Outlook, evenals Google Spreadsheets en Documenten aangescherpt. Michael's blog is gewijd aan het delen van zijn kennis en expertise met anderen, met eenvoudig te volgen tips en tutorials voor het verbeteren van de productiviteit en efficiëntie. Of je nu een doorgewinterde professional of een beginner bent, Michaels blog biedt waardevolle inzichten en praktisch advies om het meeste uit deze essentiële softwaretools te halen.