Turinys
Šioje pamokoje parodyta, kaip "Excel" programoje iš įvairių teksto eilučių išgauti skaičių, naudojant formules ir įrankį Ištraukti.
Kai reikia išskirti tam tikro ilgio teksto eilutės dalį, "Excel" siūlo tris substring funkcijas (Left, Right ir Mid), kurios padeda greitai atlikti užduotį. Kai reikia iš raidžių ir skaičių eilutės išskirti skaičius, "Microsoft Excel" nesiūlo... nieko.
Norint "Excel" programoje iš eilutės gauti skaičių, reikia šiek tiek išradingumo, kantrybės ir įvairių funkcijų, įterptų viena į kitą. Arba galite paleisti išskyrimo įrankį ir darbą atlikti vienu pelės spustelėjimu. Toliau rasite išsamią informaciją apie abu metodus.
Kaip iš teksto eilutės pabaigos išgauti skaičių
Jei turite raidinių-skaitmeninių eilučių stulpelį, kuriame skaičius eina po teksto, galite naudoti šią formulę.
TEISĖ( ląstelė , LEN( ląstelė ) - MAX(IF(ISNUMBER(MID( ląstelė , ROW(INDIRECT("1:"&LEN( ląstelė ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( ląstelė ))), 0)))Formulės logiką aptarsime šiek tiek vėliau. Kol kas tiesiog pakeiskite ląstelė su nuoroda į ląstelę, kurioje yra pradinė eilutė (mūsų atveju A2), ir įveskite formulę į bet kurią tuščią tos pačios eilutės ląstelę, pavyzdžiui, B2:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))))
Pagal šią formulę skaičius gaunamas tik nuo galo. Jei eilutės pradžioje arba viduryje taip pat yra skaičių, į juos neatsižvelgiama:
Išskyrimas atliekamas naudojant funkciją RIGHT, kuri priklauso kategorijai Text functions. Šios funkcijos išvestis visada yra tekstas Mūsų atveju rezultatas yra skaitinė ištisinė eilutė , kuris "Excel" programoje taip pat yra tekstas, o ne skaičius.
Jei norite, kad rezultatas būtų numeris (kurį galėsite naudoti tolesniuose skaičiavimuose), tada įtraukite formulę į funkciją VALUE arba atlikite aritmetinį veiksmą, kuris nekeičia rezultato, pavyzdžiui, padauginkite iš 1 arba pridėkite 0. Norėdami užfiksuoti klaidas eilutėse, kuriose nėra nė vieno skaičiaus, naudokite funkciją IFERROR. Pvz:
=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)))), "")
arba
=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, "")
Pastaba. "Excel" programoje "Dynamic Array Excel" ("Office 365" ir 2021 m.) formulę įvedate įprastu būdu, naudodami klavišą Enter. 2019 m. ir ankstesnėse programose "Excel" ji veikia tik kaip masyvo formulė, todėl nepamirškite paspausti Ctrl + Shift + Enter, kad ją užbaigtumėte.
Kaip veikia ši formulė:
Norėdami iš raidžių ir skaičių eilutės išgauti skaičių, pirmiausia turite žinoti, nuo ko pradėti išskyrimą. Paskutinio neskaitmeninio simbolio pozicija eilutėje nustatoma pagal šią sudėtingą formulę:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
Kad suprastume logiką, panagrinėkime ją iš vidaus:
ROW(INDIRECT("1:"&LEN(A2))) kombinacija sukuria skaičių seką, atitinkančią bendrą simbolių skaičių pradinėje eilutėje (A2), ir šiuos eilės numerius pateikiame MID kaip pradinius numerius:
MID(A2, {1;2;3;4;5;6;7;8}, 1)
MID funkcija iš A2 ištraukia kiekvieną atskirą simbolį ir grąžina jį kaip masyvą:
{"0";"5";"-";"E";"C";"-";"0";"1"}
Kadangi MID yra tekstinė funkcija, jos išvestis visada yra tekstas (kaip pastebėjote, visi simboliai yra pateikti kabutėse). Kad skaitinius vienetus paverstume skaičiais, padauginame masyvą iš 1 (dvigubas neigimas --MID() turės tą patį poveikį). Šios operacijos rezultatas yra skaičių masyvas ir #VALUE! klaidos, žyminčios neskaitmeninius simbolius:
ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})
Funkcija ISNUMBER įvertina kiekvieną masyvo elementą ir pateikia savo verdiktą loginėmis reikšmėmis: TRUE - skaičiams, FALSE - bet kam kitam:
{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE}
Šis masyvas patenka į funkcijos IF loginį testą, kurio metu kiekvienas masyvo elementas lyginamas su FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0)
Kiekvienai FALSE (neskaitmeninei reikšmei) kita funkcija ROW(INDIRECT()) grąžina jos santykinę vietą eilutėje. Kiekvienai TRUE (skaitinei reikšmei) grąžinamas nulis. Gautas masyvas atrodo taip:
{0;0;3;4;5;6;0;0}
Likusi dalis nesudėtinga. Funkcija MAX suranda didžiausią skaičių pirmiau pateiktame masyve, kuris yra paskutinės neskaitmeninės reikšmės eilutėje (mūsų atveju 6) pozicija. Tiesiog atimkite šią poziciją iš viso eilutės ilgio, kurį grąžina LEN, ir perduokite rezultatą RIGHT, kad ji žinotų, kiek simbolių reikia išskirti iš dešiniosios eilutės pusės:
RIGHT(A2, LEN(A2) - 6)
Atlikta!
Kaip išgauti skaičių iš teksto eilutės pradžios
Jei dirbate su įrašais, kuriuose tekstas rodomas po skaičiaus, galite išgauti skaičių iš eilutės pradžios naudodami šią bendrą formulę:
LEFT( ląstelė , MATCH(FALSE, ISNUMBER(MID( ląstelė , ROW(INDIRECT("1:"&LEN( ląstelė )+1)), 1) *1), 0) -1)Naudodami pradinę eilutę A2, skaičių gaukite pagal šią formulę:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1))), 1) *1), 0) -1)
Nesvarbu, kiek skaitmenų yra viduryje ar pabaigoje, išvedamas tik pradinis skaičius:
Pastaba. "Excel 365" ir "Excel 2021" dėl dinaminių masyvų palaikymo įprasta formulė tinka. 2019 m. ir ankstesnėse programose turėtumėte paspausti Ctrl + Shift + Enter, kad formulė taptų aiški. masyvo formulė .
Kaip veikia ši formulė:
Čia vėl naudojame ROW, INDIRECT ir LEN funkcijų derinį, kad sukurtume skaičių seką, lygią pradinėje eilutėje esančių simbolių skaičiui plius 1 (šio papildomo simbolio vaidmuo paaiškės šiek tiek vėliau).
ROW(INDIRECT("1:"&LEN(A2)+1))
MID ir ISNUMBER atlieka tą patį darbą kaip ir ankstesniame pavyzdyje - MID ištraukia atskirus simbolius, o ISNUMBER paverčia juos loginėmis reikšmėmis. Gautas TRUE ir FALSE masyvas perduodamas MATCH funkcijai kaip paieškos masyvas:
MATCH(FALSE, {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;FALSE}, 0)
MATCH apskaičiuoja pirmojo FALSE santykinę padėtį, taip gaudami pirmojo neskaitmeninio simbolio eilutėje padėtį (3 eilutėje A2). Norėdami išskirti prieš tai esančius skaičius, iš pirmojo teksto simbolio padėties atimame 1 ir skirtumą paduodame į num_chars funkcijos LEFT argumentas:
LEFT(A2, 3-1)
Dabar grįžkime prie "papildomo" simbolio sekoje, sukurtoje ROW(INDIRECT()+1)). Kaip jau žinote, ši seka suteikia pradinius taškus MID funkcijai. Jei nebūtų +1, MID išskirtų lygiai tiek simbolių, kiek jų yra pradinėje eilutėje. Jei eilutėje yra tik skaičiai, ISNUMBER grąžins tik TRUE, o MATCH reikia bent vieno FALSE. Kad tai užtikrintume, pridedame vienądaugiau simbolių į bendrą eilutės ilgį, kurį MID funkcija konvertuotų į tuščią eilutę. Pavyzdžiui, B7, MID grąžina šią eilutę:
{"1"; "2"; "3"; "4";""}
Pastaba. Kaip ir funkcija RIGHT, LEFT taip pat grąžina skaitinė ištisinė eilutė , kuris techniškai yra tekstas, o ne skaičius. Norėdami gauti rezultatą kaip skaičių, o ne kaip skaičių eilutę, įterpkite formulę į funkciją VALUE arba padauginkite rezultatą iš 1, kaip parodyta pirmajame pavyzdyje.
Kaip gauti skaičių iš bet kurios eilutės pozicijos
Jei jūsų užduotyje reikia iš bet kurios eilutės vietos išgauti skaičių, galite pasinaudoti šia protu nesuvokiama formule, paskelbta "MrExcel" forume:
=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)
Kai A2 yra pradinė teksto eilutė.
Šiai formulei aprašyti reikėtų atskiro straipsnio, todėl galite tiesiog nukopijuoti ją į savo darbalapį ir įsitikinti, kad ji tikrai veikia :)
Tačiau išnagrinėję rezultatus galite pastebėti vieną nereikšmingą trūkumą - jei pradinėje eilutėje nėra skaičiaus, formulė grąžina nulį, kaip 6 eilutėje pirmiau pateiktame paveikslėlyje. Norėdami tai ištaisyti, galite formulę įtraukti į teiginį IF, kurio loginis testas tikrina, ar pradinėje eilutėje yra koks nors skaičius. Jei taip, formulė ištraukia skaičių, priešingu atveju grąžina tuščią eilutę.eilutė:
=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),"")
Kaip parodyta toliau pateiktoje ekrano nuotraukoje, patobulinta formulė veikia puikiai (už šį patobulinimą pagyrimai mūsų "Excel" guru Aleksui):
Skirtingai nei visuose ankstesniuose pavyzdžiuose, šios formulės rezultatas yra numeris Norėdami tuo įsitikinti, tiesiog atkreipkite dėmesį į B stulpelio dešinėje sulygiuotas reikšmes ir sutrumpintus pirmuosius nulius.
Patarimas. 2019 m. "Excel 365" - "Excel 2019" programoje yra daug paprastesnis sprendimas naudojant funkciją TEXTJOIN. Žr. skyrių Kaip pašalinti tekstą ir išsaugoti skaičius.
Numerio išskyrimas iš teksto eilutės naudojant "Ultimate Suite
Kaip ką tik matėte, nėra trivialios "Excel" formulės skaičiui iš teksto eilutės išgauti. Jei jums sunku suprasti formules arba jas pritaikyti savo duomenų rinkiniams, jums gali patikti šis paprastas būdas gauti skaičių iš eilutės "Excel" programoje.
Naudodami "Ultimate Suite", pridėtą prie "Excel" juostos, galite greitai gauti skaičių iš bet kokios raidinės-skaitmeninės eilutės:
- Eikite į Ablebitų duomenys skirtukas> Tekstas grupę ir spustelėkite Ištrauka :
- Pasirinkite visas langelius su šaltinio eilutėmis.
- Ištraukimo įrankio lange pasirinkite Ištraukos numeriai radijo mygtuką.
- Priklausomai nuo to, ar norite, kad rezultatai būtų formulės, ar reikšmės, pasirinkite Įterpti kaip formulę arba palikite jį nepažymėtą (numatytasis nustatymas).
Patariu pažymėti šį langelį, jei norite, kad išskirti skaičiai būtų automatiškai atnaujinami, kai tik atliekami kokie nors šaltinio eilučių pakeitimai. Jei norite, kad rezultatai nepriklausytų nuo pradinių eilučių (pvz., jei vėliau planuojate pašalinti šaltinio duomenis), šio langelio nepažymėkite.
- Spustelėkite Įterpti rezultatus mygtukas. Atlikta!
Kaip ir ankstesniame pavyzdyje, išskyrimo rezultatai yra numeriai , t. y. galite juos laisvai skaičiuoti, sumuoti, vidurkinti ar atlikti bet kokius kitus skaičiavimus.
Šiame pavyzdyje pasirinkome rezultatus įterpti kaip reikšmės , o papildinys atliko būtent tai, ko buvo prašoma:
Jei Įterpti kaip formulę pažymėtas žymimasis langelis, pastebėsite, kad formulė Formulės juostoje. Smalsu sužinoti, kuris iš jų? Tiesiog atsisiųskite Ultimate Suite bandomąją versiją ir įsitikinsite patys :)
Galimi atsisiuntimai
"Excel" ekstrakto numeris - pavyzdinė darbo knyga (.xlsx failas)
"Ultimate Suite" - bandomoji versija (.exe failas)