Sisukord
Õpetus näitab, kuidas Exceli erinevatest tekstisõnadest numbreid ekstraheerida, kasutades valemeid ja tööriista "Väljavõte".
Kui tegemist on teatud pikkusega tekstistringi osa väljavõtmisega, pakub Excel kolme Substring-funktsiooni (Left, Right ja Mid), mis võimaldavad selle ülesandega kiiresti toime tulla. Kui tegemist on numbrite väljavõtmisega tähtnumbrilisest stringist, ei paku Microsoft Excel... midagi.
Selleks, et saada Excelis stringist number, on vaja veidi leidlikkust, kannatlikkust ja hulga erinevaid üksteise sisse põimitud funktsioone. Või võite käivitada tööriista Extract ja saada töö tehtud ühe hiireklikiga. Allpool leiate täieliku ülevaate mõlema meetodi kohta.
Kuidas ekstraheerida number teksti stringi lõpust
Kui teil on tähtnumbriliste stringide veerg, kus number on teksti järel, saate selle saamiseks kasutada järgmist valemit.
ÕIGUS( rakk , LEN( rakk ) - MAX(IF(ISNUMBER(MID( rakk , ROW(INDIRECT("1:"&LEN( rakk ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( rakk ))), 0)))Valemi loogikaga tegeleme veidi hiljem. Praegu asendame lihtsalt valemiga rakk viitega lahtrisse, mis sisaldab algset stringi (meie puhul A2), ja sisestage valem samasse rea mis tahes tühja lahtrisse, näiteks lahtrisse B2:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0)))))
See valem saab numbri ainult lõpust. Kui stringi alguses või keskel on ka numbreid, siis neid ignoreeritakse:
Ekstraheerimine toimub funktsiooniga RIGHT, mis kuulub kategooriasse Text functions. Selle funktsiooni väljundiks on alati tekst Meie puhul on tulemuseks numbriline osaühend , mis Exceli mõistes on samuti tekst, mitte number.
Kui teil on vaja, et tulemus oleks number (mida saab kasutada edasistes arvutustes), siis mähkige valem funktsiooniga VALUE või tehke aritmeetiline operatsioon, mis ei muuda tulemust, näiteks korrutage 1ga või lisage 0. Et tabada vigu stringides, mis ei sisalda ühtegi numbrit, kasutage funktsiooni IFERROR. Näiteks:
=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)))), "")
või
=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, "")
Märkus. Dynamic Array Excelis (Office 365 ja 2021) sisestate valemi tavalisel viisil Enter-klahviga. Excel 2019 ja varasemates programmides töötab see ainult massiivi valemina, seega ärge unustage vajutada Ctrl + Shift + Enter, et seda täita.
Kuidas see valem töötab:
Selleks, et eraldada tähtnumbrilisest stringist number, tuleb kõigepealt teada, kust väljavõtet alustada. Viimase mittenumbrilise märgi asukoht stringis määratakse selle keerulise valemi abil:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0)))
Et mõista loogikat, uurime seda seestpoolt:
Kombinatsioon ROW(INDIRECT("1:"&LEN(A2))) loob numbrite jada, mis vastab lähtekriipsu (A2) tähemärkide koguarvule, ja me kasutame neid järjestikuseid numbreid MID-i algnumbritena:
MID(A2, {1;2;3;4;5;6;7;8}, 1)
Funktsioon MID tõmbab A2-st iga üksiku tähemärgi ja tagastab need massiivi kujul:
{"0";"5";"-";"E";"C";"-";"0";"1"}
Kuna MID on tekstifunktsioon, on selle väljund alati tekst (nagu märkate, on kõik märgid ümbritsetud jutumärkidesse). Et muuta numbrilised üksused numbriteks, korrutame massiivi 1ga (kahekordne eitamine --MID() annab sama efekti). Selle operatsiooni tulemuseks on numbrite ja #VALUE! vigade massiivi, mis tähistavad mittenumbrilisi märke:
ISNUMBER({0;5;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;#VÄÄRTUS!;0;1})
Funktsioon ISNUMBER hindab iga massiivi elementi ja annab oma otsuse boolaarsete väärtuste kujul - TRUE numbrite puhul, FALSE kõige muu puhul:
{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE}
See massiivi läheb IF-funktsiooni loogilisse testimisse, kus iga massiivi elementi võrreldakse FALSE-ga:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
Iga FALSE (mittenumbriline väärtus) puhul tagastatakse teine funktsioon ROW(INDIRECT()), mis tagastab selle suhtelise positsiooni stringis. Iga TRUE (numbriline väärtus) puhul tagastatakse null. Saadud massiivi näeb välja järgmiselt:
{0;0;3;4;5;6;0;0}
Ülejäänud on lihtne. Funktsioon MAX leiab ülaltoodud massiivist suurima arvu, mis on stringi viimase mittenumbrilise väärtuse positsioon (meie puhul 6). Lihtsalt lahutame selle positsiooni stringi kogupikkusest, mille LEN tagastab, ja anname tulemuse RIGHTile, et see teaks, mitu märki tuleb stringi paremast servast välja võtta:
PAREM(A2, LEN(A2) - 6)
Valmis!
Kuidas ekstraheerida number tekstistringi algusest
Kui töötate kirjetega, kus tekst esineb pärast numbrit, saate selle üldvalemi abil eraldada numbri stringi algusest:
LEFT( rakk , MATCH(FALSE, ISNUMBER(MID( rakk , ROW(INDIRECT("1:"&LEN( rakk )+1)), 1) *1), 0) -1)Kasutades algset stringi A2, kasutage järgmise valemi, et saada number:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1))
Olenemata sellest, kui palju numbreid on keskel või lõpus, eraldatakse ainult algarv:
Märkus. Excel 365-s ja Excel 2021-s töötab tänu dünaamiliste massiividega seotud toetusele tavaline valem. Excel 2019-s ja varasemates programmides peaksite vajutama Ctrl + Shift + Enter, et teha selgesõnaliselt massiivi valem .
Kuidas see valem töötab:
Siinkohal kasutame jälle funktsioonide ROW, INDIRECT ja LEN kombinatsiooni, et luua numbrite jada, mis on võrdne algse stringi tähemärkide koguarvuga pluss 1 (selle lisamärgi roll selgub veidi hiljem).
ROW(INDIRECT("1:"&LEN(A2)+1))
MID ja ISNUMBER teevad sama tööd nagu eelmises näites - MID tõmbab üksikud tähemärgid ja ISNUMBER teisendab need loogilisteks väärtusteks. Saadud TRUE'de ja FALSE'de massiivi läheb funktsioonile MATCH otsingumassiivina:
MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)
MATCH arvutab esimese FALSE suhtelise positsiooni, mis annab meile esimese mittenumbrilise märgi positsiooni stringis (3 A2-s). Eelnevate numbrite väljavõtmiseks lahutame 1 positsioonist esimese tekstimärgi ja serveerime erinevuse num_chars funktsiooni LEFT argument:
LEFT(A2, 3-1)
Nüüd tagasi "lisamärgi" juurde, mis on genereeritud ROW(INDIRECT()+1)). Nagu juba teada, annab see jada alguspunktid funktsioonile MID. Ilma +1-ta, MID eraldaks täpselt nii palju märke, kui on algses stringis. Kui string sisaldab ainult numbreid, siis ISNUMBER tagastab ainult TRUE'd, samas kui MATCH vajab vähemalt ühte FALSE'i. Selle tagamiseks lisame üherohkem tähemärki stringi kogupikkusele, mille funktsioon MID teisendab tühjaks stringiks. Näiteks B7 puhul tagastab MID selle massiivi:
{"1"; "2"; "3"; "4";""}
Märkus. Nagu ka funktsioon RIGHT, tagastab ka LEFT funktsiooni numbriline osaühend , mis on tehniliselt tekst, mitte number. Et saada tulemus numbrina, mitte numbrina, pesitsege valem funktsioonis VALUE või korrutage tulemus 1ga, nagu on näidatud esimeses näites.
Kuidas saada number mis tahes positsioonist stringis
Kui teie ülesanne eeldab numbri väljavõtmist ükskõik kust stringist, võite kasutada järgmist MrExcel'i foorumis avaldatud hämmastavat valemit:
=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))
Kus A2 on algne tekstistring.
Selle valemi lahtiseletamine nõuaks eraldi artiklit, nii et võite lihtsalt kopeerida selle oma töölehele, et veenduda, et see tõesti töötab :)
Tulemusi uurides võite aga märgata üht ebaolulist puudust - kui lähtekriips ei sisalda numbrit, siis tagastab valem nulli, nagu ülaltoodud ekraanipildi real 6. Selle parandamiseks saate valemi ümbritseda IF-avaldusega, mille loogiline test kontrollib, kas lähtekriips sisaldab mingit numbrit. Kui sisaldab, siis valemis ekstraheeritakse see number, vastasel juhul tagastatakse tühi väärtus.string:
=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),"")
Nagu näha allpool oleval ekraanipildil, töötab täiustatud valem suurepäraselt (kiitust meie Exceli gurule Alexile selle paranduse eest):
Erinevalt kõigist eelnevatest näidetest on selle valemi tulemus number Et selles veenduda, märkige lihtsalt paremale joondatud väärtusi veerus B ja kärbitud eesolevaid nulle.
Vihje. Excel 365 - Excel 2019-s on palju lihtsam lahendus funktsiooni TEXTJOIN abil. Vt Kuidas eemaldada teksti ja säilitada numbrid.
Ekstrakti number tekstist string Ultimate Suite'iga
Nagu äsja nägite, ei ole triviaalset Exceli valemit, et tõmmata tekstist stringist number. Kui teil on raskusi valemite mõistmisega või nende kohandamisega oma andmekogumite jaoks, võib teile meeldida see lihtne viis numbri saamiseks stringist Excelis.
Kui meie Ultimate Suite on lisatud teie Exceli ribale, saate nii kiiresti leida numbri mis tahes tähtnumbrilisest stringist:
- Minge Ablebits andmed tab> Tekst rühma ja klõpsake Väljavõte :
- Valige kõik lahtrid, kus on lähtesõnu.
- Valige väljavõtte tööriista paanil valige Väljavõte numbritest raadionupp.
- Sõltuvalt sellest, kas soovite, et tulemused oleksid valemid või väärtused, valige vormeli Sisesta valemina kasti või jäta see valimata (vaikimisi).
Minu soovitus on valida see ruut, kui soovite, et ekstraheeritud numbrid uuendatakse automaatselt kohe, kui lähtestringides tehakse muudatusi. Kui soovite, et tulemused oleksid sõltumatud algsetest stringidest (nt juhul, kui kavatsete hiljem lähteandmed eemaldada), siis ärge valige seda ruutu.
- Klõpsake nuppu Sisesta tulemused nuppu. Valmis!
Nagu eelmises näites, on ekstraheerimise tulemused järgmised numbrid , mis tähendab, et võite vabalt loendada, summeerida, keskmistada või teha nendega mis tahes muid arvutusi.
Selles näites oleme valinud tulemuste sisestamise kujul väärtused , ja lisavõimalus tegi täpselt seda, mida paluti:
Kui Sisesta valemina märkeruut oli valitud, siis täheldatakse, et valem valemiribal. Tahad teada, milline neist on? Lae lihtsalt alla Ultimate Suite'i prooviversioon ja vaata ise :)
Saadaolevad allalaadimised
Exceli väljavõtte number - näidistööraamat (.xlsx fail)
Ultimate Suite - prooviversioon (.exe fail)