Talaan ng nilalaman
Ipinapakita ng tutorial kung paano mag-extract ng numero mula sa iba't ibang text string sa Excel sa pamamagitan ng paggamit ng mga formula at Extract tool.
Pagdating sa pag-extract ng bahagi ng isang text string na may partikular na haba , Excel ay nagbibigay ng tatlong Substring function (Kaliwa, Kanan at Gitna) upang mabilis na mahawakan ang gawain. Pagdating sa pagkuha ng mga numero mula sa isang alphanumeric string, ang Microsoft Excel ay nagbibigay ng... wala.
Upang makakuha ng numero mula sa isang string sa Excel, nangangailangan ito ng kaunting talino, kaunting pasensya, at maraming iba't ibang function nakapugad sa isa't isa. O, maaari mong patakbuhin ang Extract tool at gawin ang trabaho gamit ang isang pag-click ng mouse. Sa ibaba makikita mo ang buong detalye sa parehong mga pamamaraan.
Paano kunin ang numero mula sa dulo ng text string
Kapag mayroon kang column ng mga alphanumeric string kung saan sumusunod ang numero text, maaari mong gamitin ang sumusunod na formula para makuha ito.
RIGHT( cell, LEN( cell) - MAX(IF(ISNUMBER(MID( cell<2)>, ROW(INDIRECT("1:"&LEN( cell ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( cell ))), 0)))Tatalakayin natin ang lohika ng formula mamaya. Sa ngayon, palitan lang ang cell ng isang reference sa cell na naglalaman ng orihinal na string (A2 sa aming kaso), at ilagay ang formula sa anumang walang laman na cell sa parehong row, sabihin sa B2:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
Ang formula na ito ay nakakakuha lamang ng numero mula sa dulo. Kung ang isang string ay mayroon ding mga numero sa simula o gitna, sila ayhindi pinansin:
Isinasagawa ang pagkuha gamit ang RIGHT function na kabilang sa kategorya ng mga Text function. Ang output ng function na ito ay palaging text . Sa aming kaso, ang resulta ay isang numeric substring , na sa mga tuntunin ng Excel ay text din, hindi numero.
Kung kailangan mong maging isang number ang resulta. (na maaari mong gamitin sa karagdagang mga kalkulasyon), pagkatapos ay i-wrap ang formula sa VALUE function o magsagawa ng aritmetika na operasyon na hindi nagbabago sa resulta, sabihin nating, i-multiply sa 1 o magdagdag ng 0. Upang mahuli ang mga error sa mga string na hindi naglalaman ng isang solong numero, gamitin ang function na IFERROR. Halimbawa:
=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)))), "")
o
=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, "")
Tandaan. Sa Dynamic Array Excel (Office 365 at 2021), ilalagay mo ang formula sa karaniwang paraan gamit ang Enter key. Sa Excel 2019 at mas maaga, ito ay gumagana lamang bilang isang array formula, kaya tandaan na pindutin ang Ctrl + Shift + Enter upang makumpleto ito.
Paano gumagana ang formula na ito:
Upang kunin ang numero mula sa isang alphanumeric string, ang unang bagay na kailangan mong malaman ay kung saan sisimulan ang pagkuha. Ang posisyon ng huling hindi numeric na character sa isang string ay tinutukoy sa tulong ng mapanlinlang na formula na ito:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN() A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))
Upang maunawaan ang logic, imbestigahan natin ito mula sa loob :
Ang kumbinasyon ng ROW(INDIRECT("1:"&LEN(A2)))lumilikha ng pagkakasunud-sunod ng mga numero na tumutugma sa kabuuang mga character sa source string (A2), at inihahatid namin ang mga sequential number na ito sa MID bilang mga panimulang numero:
MID(A2, {1;2;3;4 ;5;6;7;8}, 1)
Hinihila ng MID function ang bawat indibidwal na character mula sa A2 at ibinabalik ang mga ito bilang array:
{"0";"5";" -";"E";"C";"-";"0";"1"}
Dahil ang MID ay isang text function, ang output nito ay palaging text (tulad ng mapapansin mo, lahat ng mga character ay nakapaloob sa mga panipi). Upang gawing numero ang mga numeric, i-multiply namin ang array sa 1 (double negation --MID() ay magkakaroon ng parehong epekto). Ang resulta ng operasyong ito ay isang hanay ng mga numero at #VALUE! mga error na kumakatawan sa mga hindi numeric na character:
ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})
Ang ISNUMBER function sinusuri ang bawat elemento ng array at binibigyan ang hatol nito sa anyo ng mga Boolean value - TRUE para sa mga numero, FALSE para sa anumang bagay:
{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}
Ang array na ito ay pumupunta sa logical test ng IF function, kung saan ang bawat elemento ng array ay inihambing laban sa FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
Para sa bawat FALSE (non-numeric value), isa pang ROW(INDIRECT()) function ang nagbabalik relatibong posisyon nito sa string. Para sa bawat TRUE (numeric value), isang zero ang ibinabalik. Ang resultang array ay mukhangsumusunod:
{0;0;3;4;5;6;0;0}
Madali lang ang iba. Hinahanap ng MAX function ang pinakamataas na numero sa array sa itaas, na siyang posisyon ng huling hindi numeric na halaga sa string (6 sa aming kaso). Basta, ibawas ang posisyong iyon mula sa kabuuang haba ng string na ibinalik ng LEN, at ipasa ang resulta sa RIGHT para ipaalam dito kung ilang character ang kukunin mula sa kanang bahagi ng string:
RIGHT(A2, LEN (A2) - 6)
Tapos na!
Paano kunin ang numero mula sa simula ng text string
Kung nagtatrabaho ka sa mga talaan kung saan lumalabas ang text pagkatapos ng numero, maaari mong i-extract ang numero mula sa simula ng isang string sa pamamagitan ng paggamit ng generic na formula na ito:
LEFT( cell , MATCH(FALSE, ISNUMBER(MID( cell , ROW(INDIRECT("1: "&LEN( cell )+1)), 1) *1), 0) -1)Gamit ang orihinal na string sa A2, gamitin ang sumusunod na formula upang makakuha ng numero:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
Gaano man karaming digit ang nasa gitna o dulo, ang panimulang numero lang ang kinukuha:
Tandaan. Sa Excel 365 at Excel 2021, dahil sa suporta para sa mga dynamic na array, gumagana nang maayos ang isang regular na formula. Sa Excel 2019 at mas maaga, dapat mong pindutin ang Ctrl + Shift + Enter para tahasang gawin itong array formula .
Paano gumagana ang formula na ito:
Dito, muli naming ginagamit ang kumbinasyon ng mga function ng ROW, INDIRECT at LEN upang lumikha ng pagkakasunod-sunod ng mga numero na katumbas ng kabuuang mga character sa source string plus 1 (ang papel na ginagampanan ngang karagdagang character ay magiging malinaw sa ibang pagkakataon).
ROW(INDIRECT("1:"&LEN(A2)+1))
Ginagawa ng MID at ISNUMBER ang parehong trabaho tulad ng sa nakaraang halimbawa - kinukuha ng MID ang mga indibidwal na character at kino-convert ng ISNUMBER ang mga ito sa mga lohikal na halaga. Ang resultang array ng TRUE's at FALSE's ay napupunta sa MATCH function bilang lookup array:
MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)
Kinakalkula ng MATCH ang isang kaugnay na posisyon ng unang FALSE, na nagbibigay sa amin ng posisyon ng unang hindi numeric na character sa string (3 sa A2). Upang kunin ang mga naunang numero, ibawas namin ang 1 mula sa posisyon ng unang character ng teksto at ihahatid ang pagkakaiba sa num_chars argument ng LEFT function:
LEFT(A2, 3-1)
Ngayon, bumalik sa isang "dagdag" na character sa sequence na nabuo ng ROW(INDIRECT()+1)). Tulad ng alam mo na, ang sequence na ito ay nagbibigay ng mga panimulang punto para sa MID function. Kung walang +1, ang MID ay kukuha ng eksaktong bilang ng maraming mga character na mayroon sa orihinal na string. Kung ang string ay naglalaman lamang ng mga numero, ang ISNUMBER ay magbabalik lamang ng TRUE habang ang MATCH ay nangangailangan ng kahit isang FALSE. Upang matiyak iyon, nagdaragdag kami ng isa pang character sa kabuuang haba ng string, na iko-convert ng MID function sa isang walang laman na string. Halimbawa, sa B7, ibinabalik ng MID ang array na ito:
{"1";"2";"3";"4";""}
Tandaan. Tulad ng kaso sa RIGHT function, ang LEFT ay nagbabalik din ng numericsubstring , na teknikal na teksto, hindi numero. Upang makuha ang resulta bilang isang numero sa halip na isang numeric na string, ilagay ang formula sa VALUE function o i-multiply ang resulta sa 1 tulad ng ipinapakita sa unang halimbawa.
Paano makakuha ng numero mula sa anumang posisyon sa isang string
Kung ang iyong gawain ay nagpapahiwatig ng pagkuha ng numero mula sa kahit saan sa isang string, maaari mong gamitin ang sumusunod na nakakagulat na formula na inilathala sa MrExcel forum:
=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)
Kung saan ang A2 ay ang orihinal na text string.
Ang pagbuwag sa formula na ito ay mangangailangan ng hiwalay na artikulo, kaya maaari mo lang itong kopyahin sa iyong worksheet para matiyak na talagang gumagana ito :)
Sa pagsusuri sa mga resulta, gayunpaman, maaari mong mapansin ang isang maliit na disbentaha - kung ang source string ay walang numero, ang formula ay nagbabalik ng zero, tulad ng sa row 6 sa screenshot sa itaas. Upang ayusin ito, maaari mong i-wrap ang formula sa IF statement, ang lohikal na pagsubok kung saan sinusuri kung ang source string ay naglalaman ng anumang numero. Kung nangyari ito, kinukuha ng formula ang numero, kung hindi man ay nagbabalik ng walang laman na 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),"")
Tulad ng ipinapakita sa screenshot sa ibaba, gumagana nang maganda ang pinahusay na formula (kudos to Alex, aming Excel guru, para sa pagpapahusay na ito):
Hindi tulad ng lahat ng nakaraang halimbawa, ang resulta ng formula na ito ay numero . Para matiyak ito, pansinin lang ang mga value na nakahanay sa kanan sa column B at mga pinutol na nangungunang mga zero.
Tip. Sa Excel 365 -Excel 2019, mayroong isang mas simpleng solusyon sa tulong ng TEXTJOIN function. Pakitingnan ang Paano mag-alis ng text at panatilihin ang mga numero.
I-extract ang numero mula sa text string gamit ang Ultimate Suite
Gaya ng nakita mo lang, walang trivial na formula ng Excel na kukuha ng numero mula sa isang text string. Kung nahihirapan ka sa pag-unawa sa mga formula o pagsasaayos ng mga ito para sa iyong mga set ng data, maaaring gusto mo ang simpleng paraan na ito para makakuha ng numero mula sa string sa Excel.
Sa aming Ultimate Suite na idinagdag sa iyong Excel ribbon, ganito ka maaaring mabilis na makuha ang numero mula sa anumang alphanumeric string:
- Pumunta sa tab na Ablebits Data > Text , at i-click ang Extract :
- Piliin ang lahat ng mga cell na may mga pinagmulang string.
- Sa pane ng Extract tool, piliin ang radio button na I-extract ang mga numero .
- Depende sa kung gusto mong maging mga formula o value ang mga resulta, piliin ang kahon na Ipasok bilang formula o iwanan itong hindi pinili (default).
Ang payo ko ay piliin ang kahon na ito kung gusto mong awtomatikong mag-update ang mga nakuhang numero sa sandaling magawa ang anumang pagbabago sa mga string ng pinagmulan. Kung gusto mong maging independent ang mga resulta sa orihinal na mga string (hal. kung sakaling plano mong alisin ang source data sa ibang pagkakataon), huwag piliin ang kahon na ito.
- I-click ang button na Ipasok ang Mga Resulta . Tapos na!
Tulad sa nakaraang halimbawa, ang mga resulta ngang pagkuha ay mga numero , ibig sabihin ay malaya kang magbilang, magsama, mag-average, o magsagawa ng anumang iba pang mga kalkulasyon sa kanila.
Sa halimbawang ito, pinili naming ipasok ang mga resulta bilang values , at ginawa ng add-in ang eksaktong hiniling:
Kung napili ang checkbox na Insert as formula , ikaw ay d obserbahan ang isang formula sa formula bar. Gustong malaman kung alin? I-download lang ang trial ng Ultimate Suite at tingnan mo mismo :)
Mga available na download
Excel Extract Number - sample workbook (.xlsx file)
Ultimate Suite - trial version (.exe file)