Excel: Numeron poimiminen tekstijonosta

  • Jaa Tämä
Michael Brown

Ohjeessa näytetään, miten Excelissä voidaan poimia numero erilaisista tekstijonoista kaavojen ja Ote-työkalun avulla.

Kun on kyse tietyn pituisen merkkijonon osan poimimisesta, Excel tarjoaa kolme Substring-funktiota (Vasen, Oikea ja Keskimmäinen), jotka hoitavat tehtävän nopeasti. Kun on kyse numeroiden poimimisesta aakkosnumeerisesta merkkijonosta, Microsoft Excel ei tarjoa... mitään.

Numeron saaminen merkkijonosta Excelissä vaatii hieman kekseliäisyyttä, kärsivällisyyttä ja joukon erilaisia funktioita, jotka on sijoitettu toisiinsa. Voit myös käyttää Ote-työkalua ja saada työn tehtyä hiiren napsautuksella. Alla on yksityiskohtaiset tiedot molemmista menetelmistä.

    Miten poimia numero tekstin merkkijonon lopusta?

    Kun sarakkeessa on aakkosnumeerisia merkkijonoja, joissa numero tulee tekstin jälkeen, voit käyttää seuraavaa kaavaa.

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

    Tutustumme kaavan logiikkaan hieman myöhemmin, mutta korvaa nyt yksinkertaisesti komento solu viittauksella soluun, joka sisältää alkuperäisen merkkijonon (tässä tapauksessa A2), ja kirjoita kaava mihin tahansa tyhjään soluun samalla rivillä, esimerkiksi B2:een:

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

    Jos merkkijonon alussa tai keskellä on myös numeroita, ne jätetään huomiotta:

    Louhinta suoritetaan RIGHT-funktiolla, joka kuuluu luokkaan Text-funktiot. Tämän funktion ulostulo on aina seuraava teksti Meidän tapauksessamme tulos on numeerinen osajono , joka Excelin kannalta on myös tekstiä, ei numeroa.

    Jos haluat tuloksen olevan numero (jota voit käyttää myöhemmissä laskutoimituksissa), kiedo kaava sitten VALUE-funktioon tai suorita aritmeettinen operaatio, joka ei muuta tulosta, esimerkiksi kerro 1:llä tai lisää 0. Jos haluat saada kiinni virheet merkkijonoissa, jotka eivät sisällä yksittäistä numeroa, käytä IFERROR-funktiota. Esimerkiksi:

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

    tai

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

    Huomautus: Dynaaminen matriisi-Excelissä (Office 365 ja 2021) syötät kaavan tavalliseen tapaan Enter-näppäimellä. Excel 2019:ssä ja sitä aikaisemmissa versioissa se toimii vain matriisikaavana, joten muista täydentää kaava painamalla Ctrl + Shift + Enter.

    Miten tämä kaava toimii:

    Jos haluat poimia numeron aakkosnumeerisesta merkkijonosta, sinun on ensin tiedettävä, mistä aloitat poiminnan. Merkkijonon viimeisen ei-numeerisen merkin sijainti määritetään tämän hankalan kaavan avulla:

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

    Logiikan ymmärtämiseksi tutkitaan sitä sisältäpäin:

    ROW(INDIRECT("1:"&LEN(A2))) -yhdistelmä luo numerosarjan, joka vastaa lähdejonon (A2) merkkien kokonaismäärää, ja annamme nämä peräkkäiset numerot MID:lle lähtönumeroina:

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

    MID-funktio poimii jokaisen yksittäisen merkin A2:sta ja palauttaa ne matriisina:

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

    Koska MID on tekstifunktio, sen tuloste on aina tekstiä (kuten huomaat, kaikki merkit on suljettu lainausmerkkeihin). Jotta numeeriset ykköset muuttuisivat numeroiksi, kerromme joukon luvulla 1 (kaksinkertainen negaatio --MID() saa aikaan saman vaikutuksen). Tämän operaation tuloksena on joukko numeroita ja #VALUE! -virheitä, jotka edustavat ei-numeerisia merkkejä:

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

    ISNUMBER-funktio arvioi jokaisen matriisin elementin ja antaa arvionsa Boolen arvojen muodossa - TRUE, jos kyseessä on luku, FALSE, jos kyseessä on jokin muu:

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

    Tämä matriisi menee IF-funktion loogiseen testiin, jossa jokaista matriisin elementtiä verrataan FALSEen:

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

    Jokaisesta FALSE-arvosta (ei-numeerinen arvo) palautetaan toinen ROW(INDIRECT())-funktio, joka palauttaa sen suhteellisen sijainnin merkkijonossa. Jokaisesta TRUE-arvosta (numeerinen arvo) palautetaan nolla. Tuloksena oleva joukko näyttää seuraavalta:

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

    Loppu on helppoa. MAX-funktio etsii yllä olevan joukon suurimman numeron, joka on merkkijonon viimeisen ei-numeerisen arvon (tässä tapauksessa 6) sijainti. Vähennä tämä sijainti merkkijonon kokonaispituudesta, jonka LEN palauttaa, ja anna tulos RIGHT-funktiolle, jotta se tietää, kuinka monta merkkiä merkkijonon oikeasta reunasta pitää poimia:

    RIGHT(A2, LEN(A2) - 6)

    Valmis!

    Miten poimia numero tekstin merkkijonon alusta?

    Jos työskentelet tietueiden kanssa, joissa teksti on numeron jälkeen, voit poimia numeron merkkijonon alusta käyttämällä tätä yleistä kaavaa:

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

    Alkuperäisen merkkijonon A2:n avulla saat numeron seuraavan kaavan avulla:

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

    Riippumatta siitä, kuinka monta numeroa keskellä tai lopussa on, vain alkunumero poimitaan:

    Huomautus: Excel 365:ssä ja Excel 2021:ssä tavallinen kaava toimii dynaamisten matriisien tuen vuoksi hyvin. Excel 2019:ssä ja sitä aikaisemmissa ohjelmissa sinun on painettava Ctrl + Shift + Enter, jotta siitä tulee nimenomaisesti kaava. sarjakaava .

    Miten tämä kaava toimii:

    Tässä käytämme jälleen ROW-, INDIRECT- ja LEN-funktioiden yhdistelmää luodaksemme numerosarjan, joka on yhtä suuri kuin lähdejonon merkkien kokonaismäärä plus 1 (tämän lisämerkin rooli selviää hieman myöhemmin).

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

    MID ja ISNUMBER tekevät saman työn kuin edellisessä esimerkissä - MID hakee yksittäisiä merkkejä ja ISNUMBER muuntaa ne loogisiksi arvoiksi. Tuloksena syntyvä TRUE- ja FALSE-arvojen joukko menee MATCH-funktioon hakumassana:

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

    MATCH laskee ensimmäisen FALSE:n suhteellisen sijainnin, jolloin saamme merkkijonon ensimmäisen ei-numeerisen merkin sijainnin (3 kohdassa A2). Jotta voimme poimia edeltävät numerot, vähennämme 1:n ensimmäisen tekstimerkin sijainnista ja annamme erotuksen kohtaan num_chars LEFT-funktion argumentti:

    LEFT(A2, 3-1)

    Nyt takaisin "ylimääräiseen" merkkiin ROW(INDIRECT()+1)):n tuottamassa sekvenssissä. Kuten jo tiedät, tämä sekvenssi antaa lähtökohdat MID-funktiolle. Ilman +1:tä MID poimisi täsmälleen yhtä monta merkkiä kuin alkuperäisessä merkkijonossa on. Jos merkkijono sisältää vain numeroita, ISNUMBER palauttaa vain TRUE:ita, kun taas MATCH tarvitsee vähintään yhden FALSE:n. Varmistaaksemme tämän lisäämme yhdenlisää merkkiä merkkijonon kokonaispituuteen, jonka MID-funktio muuttaisi tyhjäksi merkkijonoksi. Esimerkiksi kohdassa B7 MID palauttaa tämän sarjan:

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

    Huomautus: Kuten RIGHT-funktio, myös LEFT palauttaa arvon RIGHT. numeerinen osajono , joka on teknisesti tekstiä, ei numeroa. Jos haluat saada tuloksen numerona eikä numeerisena merkkijonona, sisällytä kaava VALUE-funktioon tai kerro tulos 1:llä, kuten ensimmäisessä esimerkissä.

    Miten saada numero mistä tahansa kohdasta merkkijonossa?

    Jos tehtäväsi edellyttää numeron poimimista mistä tahansa merkkijonon kohdasta, voit käyttää seuraavaa MrExcel-foorumilla julkaistua hämmästyttävää kaavaa:

    =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(INDIRECT("1:"&LEN(A2)))/10))

    Jossa A2 on alkuperäinen merkkijono.

    Tämän kaavan erittely vaatisi erillisen artikkelin, joten voit yksinkertaisesti kopioida sen työtaulukkoon varmistaaksesi, että se todella toimii :)

    Tuloksia tarkastellessasi saatat kuitenkin huomata yhden vähäpätöisen haittapuolen - jos lähdejono ei sisällä numeroa, kaava palauttaa nollan, kuten rivillä 6 yllä olevassa kuvakaappauksessa. Tämän korjaamiseksi voit kietoa kaavan IF-lausekkeeseen, jonka looginen testi tarkistaa, sisältääkö lähdejono numeron. Jos sisältää, kaava poimii numeron, muuten palauttaa tyhjänmerkkijono:

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

    Kuten alla olevasta kuvakaappauksesta näkyy, parannettu kaava toimii hienosti (kiitokset Alexille, Excel-gurulle, tästä parannuksesta):

    Toisin kuin kaikissa edellisissä esimerkeissä, tämän kaavan tulos on seuraavanlainen numero Varmistaaksesi tämän, huomaa oikealle tasatut arvot sarakkeessa B ja katkaistut etunollat.

    Vihje. Excel 365 - Excel 2019 -ohjelmassa on paljon yksinkertaisempi ratkaisu TEXTJOIN-toiminnon avulla. Katso kohta Tekstin poistaminen ja numeroiden säilyttäminen.

    Pura numero tekstijonosta Ultimate Suite -ohjelmalla

    Kuten olet juuri nähnyt, ei ole olemassa mitään triviaalia Excel-kaavaa, jolla numeron saisi tekstijonosta. Jos sinulla on vaikeuksia kaavojen ymmärtämisessä tai niiden muokkaamisessa tietosarjoihisi, saatat pitää tästä yksinkertaisesta tavasta saada numero merkkijonosta Excelissä.

    Kun Ultimate Suite on lisätty Excel-nauhaan, voit hakea numeron nopeasti mistä tahansa aakkosnumeerisesta merkkijonosta:

    1. Mene osoitteeseen Ablebits Data tab> Teksti ja napsauta Ote :

    2. Valitse kaikki solut, joissa on lähdejonoja.
    3. Valitse Extract-työkalun paneelissa Extract (Ote) -valintaikkuna Otetut numerot valintanappi.
    4. Riippuen siitä, haluatko tulosten olevan kaavoja vai arvoja, valitse vaihtoehto Lisää kaavana ruutu tai jätä se valitsematta (oletus).

      Suosittelen valitsemaan tämän ruudun, jos haluat, että poimitut numerot päivittyvät automaattisesti heti, kun lähdejonoihin tehdään muutoksia. Jos haluat, että tulokset ovat riippumattomia alkuperäisistä merkkijonoista (esim. jos aiot poistaa lähdetiedot myöhemmin), älä valitse tätä ruutua.

    5. Napsauta Lisää tulokset Nappi. Valmis!

    Kuten edellisessä esimerkissä, louhinnan tulokset ovat seuraavat. numerot , eli voit vapaasti laskea, laskea yhteen, laskea keskiarvoja tai suorittaa muita laskutoimituksia.

    Tässä esimerkissä olemme valinneet tuloksien lisäämisen muodossa arvot , ja lisäosa teki juuri sen, mitä pyydettiin:

    Jos Lisää kaavana valintaruutu oli valittuna, havaitsit, että kaava Kaavapalkissa. Oletko utelias tietämään, mikä niistä on? Lataa Ultimate Suiten kokeiluversio ja katso itse :)

    Saatavilla olevat lataukset

    Excel Extract Number - esimerkkityökirja (.xlsx-tiedosto)

    Ultimate Suite - kokeiluversio (.exe-tiedosto)

    Michael Brown on omistautunut teknologian harrastaja, jolla on intohimo yksinkertaistaa monimutkaisia ​​prosesseja ohjelmistotyökalujen avulla. Yli vuosikymmenen kokemuksella teknologia-alalta hän on hionut taitojaan Microsoft Excelissä ja Outlookissa sekä Google Sheetsissä ja Docsissa. Michaelin blogi on omistettu jakamaan tietojaan ja asiantuntemustaan ​​muiden kanssa, ja se tarjoaa helposti seurattavia vinkkejä ja opetusohjelmia tuottavuuden ja tehokkuuden parantamiseksi. Olitpa kokenut ammattilainen tai aloittelija, Michaelin blogi tarjoaa arvokkaita oivalluksia ja käytännön neuvoja, joiden avulla saat kaiken irti näistä tärkeistä ohjelmistotyökaluista.