Kuinka poistaa tekstiä tai numeroita Excel-solusta

  • Jaa Tämä
Michael Brown

Tässä opetusohjelmassa opit, miten Excelissä erotetaan teksti ja numerot toisistaan käyttämällä natiivikaavoja ja mukautettuja funktioita. Opit myös, miten teksti ja numerot jaetaan kahteen erilliseen sarakkeeseen.

Kuvittele tämä: saat raakadataa analysoitavaksi ja huomaat, että numerot ja teksti ovat sekaisin yhdessä sarakkeessa. Useimmissa tilanteissa on varmasti kätevämpää, että ne ovat erillisissä sarakkeissa tarkempaa tarkastelua varten.

Jos työskentelet homogeenisen datan kanssa, voisit luultavasti käyttää LEFT-, RIGHT- ja MID-funktioita poimimaan saman merkkimäärän samasta kohdasta. Tämä on kuitenkin ihanteellinen skenaario laboratoriotestejä varten. Todellisessa elämässä olet todennäköisesti tekemisissä erilaisten datojen kanssa, joissa numerot tulevat ennen tekstiä, tekstin jälkeen tai tekstin väliin. Alla olevat esimerkit tarjoavat ratkaisuja juuri tähän.tapaus.

    Kuinka poistaa tekstiä ja pitää numerot Excel-soluissa

    Ratkaisu toimii Excel 365:ssä, Excel 2021:ssä ja Excel 2019:ssä.

    Microsoft Excel 2019 esitteli muutamia uusia toimintoja, joita ei ole saatavilla aiemmissa versioissa, ja aiomme käyttää yhtä näistä toiminnoista, nimittäin TEXTJOIN, tekstimerkkien poistamiseen numeroita sisältävästä solusta.

    Yleinen kaava on:

    TEXTJOIN("", TRUE, IFERROR(MID( solu , ROW(INDIRECT( "1:"&LEN( solu ))), 1) *1, ""))

    Excel 365:ssä ja 2021:ssä tämä toimii myös:

    TEXTJOIN("", TRUE, IFERROR(MID( solu , SEQUENCE(LEN( solu )), 1) *1, ""))

    Ensisilmäyksellä kaavat saattavat näyttää hieman pelottavalta, mutta ne toimivat :)

    Jos haluat esimerkiksi poistaa tekstiä A2:n numeroista, kirjoita jokin alla olevista kaavoista B2:een ja kopioi se sitten niin moneen soluun kuin on tarpeen.

    Excel 365 - 2019:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, "")))

    Excel 2019:ssä se on syötettävä sarjakaavana Ctrl + Shift + Enter . Dynaamisessa Excelissä se toimii tavallisena kaavana, joka täytetään Enter-näppäimellä.

    Excel 365 ja 2021:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, "")))

    Tuloksena kaikki tekstimerkit poistetaan solusta ja numerot säilytetään:

    Miten tämä kaava toimii:

    Jotta logiikkaa voidaan ymmärtää paremmin, aletaan tutkia kaavaa sisältäpäin:

    Käytät joko ROW(INDIRECT("1:"&LEN(merkkijono))) tai SEQUENCE(LEN(merkkijono)) luodaksesi numerosarjan, joka vastaa lähdejonon merkkien kokonaismäärää, ja syötät sitten nämä peräkkäiset numerot MID-funktioon lähtönumeroina. B2-kielessä tämä osa kaavasta näyttää seuraavalta:

    MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)

    MID-funktio poimii jokaisen merkin A2:sta ensimmäisestä alkaen ja palauttaa ne matriisina:

    {"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}

    Tämä joukko kerrotaan 1:llä. Numeeriset arvot säilyvät muuttumattomina, kun taas muun kuin numeerisen merkin kertominen aiheuttaa #VALUE! -virheen:

    {2;1;0;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!}

    IFERROR-funktio käsittelee nämä virheet ja korvaa ne tyhjillä merkkijonoilla:

    {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}

    Tämä lopullinen array annetaan TEXTJOIN-funktiolle, joka yhdistää array:n ei-tyhjät arvot ( ignore_empty argumentti asetettu TRUE:ksi) käyttäen tyhjää merkkijonoa ("") erottimena:

    TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})

    Vinkki. Excel 2016 - 2007 -ohjelmille on myös olemassa ratkaisu, mutta kaava on paljon monimutkaisempi. Löydät sen tästä opetusohjelmasta: Numeroiden poimiminen Excelissä.

    Mukautettu toiminto tekstin poistamiseksi numeroista

    Ratkaisu toimii kaikissa Excel-versioissa

    Jos käytät vanhempaa Excel-versiota tai pidät edellä mainittuja kaavoja liian vaikeasti muistettavina, mikään ei estä sinua luomasta omaa funktiota, jolla on yksinkertaisempi syntaksi ja käyttäjäystävällinen nimi, kuten esim. RemoveText Käyttäjän määrittelemä funktio (UDF) voidaan kirjoittaa kahdella tavalla:

    VBA-koodi 1:

    Tässä tarkastellaan lähdejonon jokaista merkkiä yksitellen ja tarkistetaan, onko se numeerinen vai ei. Jos merkki on numero, se lisätään tuloksena olevaan merkkijonoon.

    Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End Function

    VBA-koodi 2:

    Koodissa luodaan objekti, joka käsittelee säännöllistä lauseketta. RegExp:n avulla poistamme lähdejonosta kaikki muut merkit kuin numerot 0-9.

    Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End Function End Function

    Pienillä laskentataulukoilla molemmat koodit toimivat yhtä hyvin. Suurilla laskentataulukoilla, joilla funktiota kutsutaan satoja tai tuhansia kertoja, VBScript.RegExp:tä käyttävä koodi 2 toimii nopeammin.

    Yksityiskohtaiset vaiheet koodin lisäämiseksi työkirjaan löydät täältä: VBA-koodin lisääminen Exceliin.

    Valitsitpa minkä lähestymistavan tahansa, loppukäyttäjän näkökulmasta tekstin poistaminen ja numeroiden jättäminen on näin yksinkertaista:

    RemoveText(string)

    Jos esimerkiksi haluat poistaa muut kuin numeeriset merkit solusta A2, B2:n kaava on seuraava:

    =RemoveText(A2)

    Kopioi se sarakkeeseen, ja saat tämän tuloksen:

    Huomautus: Sekä natiivikaavat että mukautettu funktio antavat tulosteen a numeerinen merkkijono Jos haluat muuttaa sen numeroksi, kerro tulos 1:llä tai lisää nolla tai kiedo kaava VALUE-funktioon. Esimerkiksi:

    =RemoveText(A2) + 0

    =VALUE(RemoveText(A2))

    Kuinka poistaa numerot Excelin tekstijonosta

    Ratkaisu toimii Excel 365:ssä, Excel 2021:ssä ja Excel 2019:ssä.

    Kaavat numeroiden poistamiseksi aakkosnumeerisesta merkkijonosta ovat melko samanlaisia kuin edellisessä esimerkissä käsitellyt kaavat.

    Excel 365 - 2019:

    TEXTJOIN("", TRUE, IF(ISERR(MID( solu , ROW(INDIRECT( "1:"&LEN( solu ) )), 1) *1), MID( solu , ROW(INDIRECT("1:"&LEN( solu ))), 1), ""))

    Excel 2019:ssä muista tehdä siitä sarjakaava painamalla samanaikaisesti näppäimiä Ctrl + Shift + Enter.

    Excel 365 ja 2021:

    TEXTJOIN("", TRUE, IF(ISERROR(MID( solu , SEQUENCE(LEN( solu 1) *1), MID( solu , SEQUENCE(LEN( solu )), 1), ""))

    Jos esimerkiksi haluat poistaa numerot merkkijonosta A2, kaava on seuraava:

    =TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2)))), 1), "")))

    Tai

    =TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2))), 1), ""))))

    Tuloksena kaikki numerot poistetaan solusta ja tekstimerkit säilytetään:

    Kuten yllä olevasta kuvakaappauksesta näkyy, kaava poistaa numeeriset merkit mistä tahansa merkkijonon kohdasta: alusta, lopusta ja keskeltä. On kuitenkin yksi varoitus: jos merkkijono alkaa numerolla, jota seuraa välilyönti , kyseinen välilyönti säilytetään, mikä aiheuttaa ongelman etumaisista välilyönneistä (kuten B2-kohdassa).

    Päästä eroon ylimääräisestä välilyönnit ennen tekstiä , kääri kaava TRIM-funktioon seuraavasti:

    =TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2))), 1), "")))))

    Tuloksesi ovat nyt aivan täydelliset!

    Miten tämä kaava toimii:

    Kaava toimii pohjimmiltaan samalla tavalla kuin edellisessä esimerkissä selitettiin. Erona on se, että TEXTJOIN-funktioon syötetystä lopullisesta matriisista on poistettava numerot, ei tekstiä. Sen tekemiseen käytetään IF- ja ISERROR-funktioiden yhdistelmää.

    Kuten muistat, MID(....)+0 tuottaa numeroiden ja #VALUE! virheiden joukon, jotka edustavat tekstimerkkejä samoissa paikoissa:

    {2;1;0;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!;#ARVO!}

    ISERROR-funktio havaitsee virheet ja välittää tuloksena syntyvän Boolean-arvojen joukon IF:lle:

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

    Kun IF-funktio näkee TRUE (virhe), se lisää vastaavan tekstimerkin käsiteltävään joukkoon toisen MID-funktion avulla. Kun IF-funktio näkee FALSE (luku), se korvaa sen tyhjällä merkkijonolla:

    {"";"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d"}

    Tämä lopullinen joukko siirretään TEXTJOINille, joka yhdistää tekstimerkit ja antaa tuloksen.

    Mukautettu toiminto numeroiden poistamiseksi tekstistä

    Ratkaisu toimii kaikissa Excel-versioissa

    Koska vankka kaava on pidettävä yksinkertaisena, jaan käyttäjän määrittelemän funktion (UDF) koodin, jolla poistetaan kaikki numeeriset merkit.

    VBA-koodi 1:

    Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End Function

    VBA-koodi 2:

    Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End With End Function

    Kuten RemoveText-funktion tapauksessa, toista koodia on parempi käyttää suurissa työarkkeissa suorituskyvyn optimoimiseksi.

    Kun koodi on lisätty työkirjaan, voit poistaa kaikki numeeriset merkit solusta käyttämällä tätä mukautettua toimintoa:

    RemoveNumbers(string)

    Meidän tapauksessamme B2-kaava on:

    =RemoveNumbers(A2)

    Jos haluat leikata mahdolliset etumerkit, aseta mukautettu toiminto TRIM:n sisään kuten natiivikaavassa:

    =TRIM(RemoveNumbers(A2))

    Jaa numerot ja teksti erillisiin sarakkeisiin

    Tilanteessa, jossa haluat erottaa tekstin ja numerot kahteen sarakkeeseen, olisi mukavaa, että homma hoituisi yhdellä kaavalla, eikö niin? Tätä varten yhdistämme vain koodin koodin RemoveText ja RemoveNumbers funktiot yhdeksi funktioksi, jonka nimi on SplitTextNumbers tai yksinkertaisesti Split , tai mitä ikinä haluatte :)

    VBA-koodi 1:

    Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next If Next If i If True = is_remove_text Then SplitTextNumbers = sarSNum Else SplitTextNumbers = sText End If End If End If EndToiminto

    VBA-koodi 2:

    Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End With End Function

    Uusi mukautettu funktiomme vaatii kaksi argumenttia:

    SplitTextNumbers(string, is_remove_text)

    Missä is_remove_text on boolen arvo, joka osoittaa, mitkä merkit poistetaan:

    • TRUE tai 1 - poista teksti ja säilytä numerot.
    • FALSE tai 0 - poista numerot ja säilytä teksti.

    Esimerkkiaineistossamme kaavat ovat seuraavassa muodossa:

    Muiden kuin numeeristen merkkien poistaminen:

    =SplitTextNumbers(A2, TRUE)

    Numeromerkkien poistaminen:

    =SplitTextNumbers(A2, FALSE)

    Vinkki: Jos haluat välttää mahdollisen etumerkkien aiheuttaman ongelman, suosittelen aina käärimään TRIM-toiminnon numeroita poistavan kaavan:

    =TRIM(SplitTextNumbers(A2, FALSE))

    Erikoistyökalu numeroiden tai tekstin poistamiseen

    Niille, jotka eivät halua monimutkaistaa asioita tarpeettomasti, näytän oman tapamme poistaa tekstiä tai numeroita Excelissä.

    Olettaen, että Ultimate Suite on lisätty Excelin nauhaan, teet näin:

    1. On Ablebits Data välilehdellä, kohdassa Teksti ryhmää, napsauta Poista > Poista merkkejä .

  • Valitse lisäosan paneelissa lähdealue, valitse vaihtoehto Poista merkistöjä ja valitse joko Teksti merkit tai Numeerinen merkit avattavassa luettelossa.
  • Hit Poista ja nauti tuloksesta :)
  • Vihje: Jos tuloksissa on etumaisia välilyöntejä, Trim Spaces -työkalu poistaa ne hetkessä.

    Näin poistat teksti- tai numeromerkit merkkijonosta Excelissä. Kiitos lukemisesta ja odotan innolla, että tapaamme blogissamme ensi viikolla!

    Saatavilla olevat lataukset

    Poista tekstiä tai numeroita Excelissä - esimerkkejä (.xlsm-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.