Екцел: Издвој број из текстуалног низа

  • Деле Ово
Michael Brown

Упутство показује како да извучете број из различитих текстуалних низова у Екцел-у помоћу формула и алата за издвајање.

Када је у питању издвајање дела текстуалног низа дате дужине , Екцел пружа три функције подстринга (лево, десно и средње) за брзо решавање задатка. Када је у питању издвајање бројева из алфанумеричког низа, Мицрософт Екцел не пружа… ништа.

Да бисте добили број из стринга у Екцел-у, потребно је мало домишљатости, мало стрпљења и гомила различитих функција угнежђене једна у другу. Или, можете покренути алатку за издвајање и обавити посао једним кликом миша. Испод ћете пронаћи све детаље о обе методе.

    Како издвојити број са краја текстуалног низа

    Када имате колону алфанумеричких низова где број долази после текста, можете користити следећу формулу да бисте је добили.

    ДЕСНО( ћелија, ЛЕН( ћелија) - МАКС(ИФ(ИСНУМБЕР(МИД( ћелија<2)>, РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН( ћелија ))), 1) *1)=ФАЛСЕ, РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН( ћелија ))), 0)))

    На логици формуле ћемо се задржати мало касније. За сада, једноставно замените целл референцом на ћелију која садржи оригинални стринг (А2 у нашем случају) и унесите формулу у било коју празну ћелију у истом реду, рецимо у Б2:

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

    Ова формула добија број само од краја. Ако низ такође има бројеве на почетку или у средини, они суигнорисано:

    Извлачење се врши помоћу ДЕСНЕ функције која припада категорији текстуалних функција. Излаз ове функције је увек текст . У нашем случају, резултат је нумерички подниз , који је у Екцел-у такође текст, а не број.

    Ако је потребно да резултат буде број (које можете да користите у даљим прорачунима), затим умотајте формулу у функцију ВАЛУЕ или извршите аритметичку операцију која не мења резултат, рецимо, помножите са 1 или додајте 0. Да бисте ухватили грешке у стринговима који не садрже један број, користите функцију ИФЕРРОР. На пример:

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

    или

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

    Напомена. У Динамиц Арраи Екцел-у (Оффице 365 и 2021) уносите формулу на уобичајен начин помоћу тастера Ентер. У програму Екцел 2019 и ранијим верзијама ради само као формула низа, па не заборавите да притиснете Цтрл + Схифт + Ентер да бисте је довршили.

    Како ова формула функционише:

    Да бисте издвојили број из алфанумеричког низа, прва ствар коју треба да знате је где да започнете екстракцију. Положај последњег ненумеричког знака у низу се одређује уз помоћ ове лукаве формуле:

    МАКС(ИФ(ИСНУМБЕР(МИД(А2, РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН( А2))), 1)*1)=ФАЛСЕ, РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН(А2))), 0))

    Да бисмо разумели логику, хајде да је истражимо изнутра :

    Комбинација РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН(А2)))креира низ бројева који одговара укупном броју знакова у изворном низу (А2), а ми сервирамо ове секвенцијалне бројеве у МИД као почетне бројеве:

    МИД(А2, {1;2;3;4 ;5;6;7;8}, 1)

    Функција МИД повлачи сваки појединачни знак из А2 и враћа их као низ:

    {"0";"5";" -";"Е";"Ц";"-";"0";"1"}

    Пошто је МИД текстуална функција, њен излаз је увек текст (као што можете приметити, сви знакови стављају се под наводнике). Да бисмо нумеричке јединице претворили у бројеве, множимо низ са 1 (дупла негација --МИД() ће имати исти ефекат). Резултат ове операције је низ бројева и #ВРЕДНОСТ! грешке које представљају ненумеричке знакове:

    ИСНУМБЕР({0;5;#ВАЛУЕ!;#ВАЛУЕ!;#ВАЛУЕ!;#ВАЛУЕ!;0;1})

    Функција ИСНУМБЕР процењује сваки елемент низа и даје своју пресуду у облику логичких вредности - ТРУЕ за бројеве, ФАЛСЕ за било шта друго:

    {ТРУЕ;ТРУЕ;ФАЛСЕ;ФАЛСЕ;ФАЛСЕ;ФАЛСЕ;ТРУЕ;ТРУЕ}

    Овај низ иде на логички тест функције ИФ, где се сваки елемент низа пореди са ФАЛСЕ:

    ИФ({ТРУЕ;ТРУЕ;ФАЛСЕ;ФАЛСЕ;ФАЛСЕ;ФАЛСЕ;ТРУЕ ;ТРУЕ}=ФАЛСЕ, РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН(А2))), 0)

    За сваки ФАЛСЕ (ненумеричка вредност), друга РОВ(ИНДИРЕЦТ()) функција враћа његов релативни положај у низу. За сваку ТРУЕ (нумеричку вредност), враћа се нула. Добијени низ изгледа каоследи:

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

    Остало је лако. Функција МАКС проналази највећи број у горњем низу, што је позиција последње ненумеричке вредности у низу (6 у нашем случају). Једноставно, одузмите ту позицију од укупне дужине стринга коју враћа ЛЕН и проследите резултат у ДЕСНО да бисте сазнали колико знакова треба издвојити са десне стране стринга:

    РИГХТ(А2, ЛЕН (А2) - 6)

    Готово!

    Како издвојити број са почетка текстуалног низа

    Ако радите са записима у којима се текст појављује иза броја, можете издвоји број са почетка стринга користећи ову генеричку формулу:

    ЛЕФТ( ћелија , МАТЦХ(ФАЛСЕ, ИСНУМБЕР(МИД( целл , РОВ(ИНДИРЕЦТ("1: "&амп;ЛЕН( ћелија )+1)), 1) *1), 0) -1)

    Са оригиналним низом у А2, користите следећу формулу да бисте добили број:

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

    Без обзира на то колико је цифара у средини или на крају, издваја се само почетни број:

    Напомена. У Екцел 365 и Екцел 2021, због подршке за динамичке низове, обична формула функционише добро. У програму Екцел 2019 и старијим верзијама, требало би да притиснете Цтрл + Схифт + Ентер да бисте га експлицитно учинили формулом низа .

    Како ова формула функционише:

    Овде поново користимо комбинацију функција РОВ, ИНДИРЕЦТ и ЛЕН да креирамо низ бројева једнак укупном броју знакова у изворном низу плус 1 (улога тогдодатни карактер ће постати јасни мало касније).

    РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН(А2)+1))

    МИД и ИСНУМБЕР раде исти посао као у претходни пример - МИД повлачи појединачне знакове и ИСНУМБЕР их конвертује у логичке вредности. Добијени низ ТРУЕ и ФАЛСЕ иде у функцију МАТЦХ као низ за тражење:

    МАТЦХ(ФАЛСЕ, {ТРУЕ;ТРУЕ;ФАЛСЕ;ФАЛСЕ;ФАЛСЕ;ФАЛСЕ;ТРУЕ;ТРУЕ;ФАЛСЕ}, 0)

    МАТЦХ израчунава релативну позицију првог ФАЛСЕ, дајући нам позицију првог ненумеричког карактера у низу (3 у А2). Да бисмо издвојили претходне бројеве, одузимамо 1 од позиције првог знакова текста и приказујемо разлику аргументу нум_цхарс аргументу функције ЛЕФТ:

    ЛЕФТ(А2, 3-1)

    Сада се вратимо на "додатни" знак у низу који генерише РОВ(ИНДИРЕЦТ()+1)). Као што већ знате, овај низ даје почетне тачке за МИД функцију. Без +1, МИД би издвојио тачно онолико знакова колико их има у оригиналном низу. Ако стринг садржи само бројеве, ИСНУМБЕР ће вратити само ТРУЕ док МАТЦХ треба најмање један ФАЛСЕ. Да бисмо то осигурали, укупној дужини стринга додајемо још један знак, који би МИД функција претворила у празан стринг. На пример, у Б7, МИД враћа овај низ:

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

    Напомена. Као што је случај са функцијом РИГХТ, ЛЕФТ такође враћа нумеричкусубстринг , који је технички текст, а не број. Да бисте добили резултат као број, а не као нумерички низ, угнездите формулу у функцију ВАЛУЕ или помножите резултат са 1 као што је приказано у првом примеру.

    Како добити број са било које позиције у низу

    Ако ваш задатак подразумева издвајање броја из било ког места у низу, можете користити следећу запањујућу формулу објављену на МрЕкцел форуму:

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

    Где је А2 оригинални текстуални стринг.

    Разбијање ове формуле би захтевало посебан чланак, тако да можете једноставно да је копирате на свој радни лист да бисте били сигурни да заиста функционише :)

    Међутим, након испитивања резултата, можда ћете приметити један безначајан недостатак – ако изворни низ не садржи број, формула враћа нулу, као у реду 6 на слици изнад. Да бисте ово поправили, можете умотати формулу у ИФ наредбу, чији логички тест проверава да ли изворни низ садржи било који број. Ако се то деси, формула издваја број, у супротном враћа празан стринг:

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

    Као што је приказано на снимку екрана испод, побољшана формула ради прелепо (свака част Алеку, нашем Екцел гуруу, за ово побољшање):

    За разлику од свих претходних примера, резултат ове формуле је број . Да бисте се уверили у ово, само приметите десно поравнате вредности у колони Б и скраћене водеће нуле.

    Савет. У Екцел 365 -Екцел 2019, постоји много једноставније решење уз помоћ функције ТЕКСТЈОИН. Погледајте Како уклонити текст и задржати бројеве.

    Издвоји број из текстуалног низа помоћу Ултимате Суите-а

    Као што сте управо видели, не постоји тривијална Екцел формула за извлачење броја из текстуалног низа. Ако имате потешкоћа са разумевањем формула или њиховим подешавањем за своје скупове података, можда ће вам се свидети овај једноставан начин да добијете број из стринга у Екцел-у.

    Са нашим Ултимате Суите додатим на вашу Екцел траку, овако ћете може брзо да преузме број из било ког алфанумеричког низа:

    1. Идите на картицу Аблебитс Дата картицу &гт; Тект групу и кликните на Ектрацт :

    2. Изаберите све ћелије са изворним низовима.
    3. У окну алатке за издвајање изаберите радио дугме Издвоји бројеве .
    4. У зависности од тога да ли желите да резултати буду формуле или вредности, изаберите поље Уметни као формулу или га оставите неодабрано (подразумевано).

      Мој савет је да изаберете ово поље ако желите да се издвојени бројеви ажурирају аутоматски чим се изврше било какве промене у изворним стринговима. Ако желите да резултати буду независни од оригиналних стрингова (нпр. у случају да касније планирате да уклоните изворне податке), онда немојте бирати ово поље.

    5. Кликните на дугме Убаци резултате . Готово!

    Као у претходном примеру, резултатиекстракција су бројеви , што значи да можете слободно да бројите, збрајате, усредсређујете или изводите било која друга израчунавања са њима.

    У овом примеру смо изабрали да убацимо резултате као вредности , а додатак је урадио тачно оно што је тражено:

    Ако је изабрано поље за потврду Убаци као формулу , д посматра формулу у траци формуле. Занима вас који? Само преузмите пробну верзију Ултимате Суите-а и уверите се сами :)

    Доступна преузимања

    Екцел Ектрацт Нумбер – пример радне свеске (.клск датотека)

    Ултимате Суите – пробна верзија (.еке фајл)

    Мајкл Браун је посвећен технолошки ентузијаста са страшћу за поједностављење сложених процеса помоћу софтверских алата. Са више од деценије искуства у технолошкој индустрији, усавршио је своје вештине у Мицрософт Екцел-у и Оутлоок-у, као и у Гоогле табеле и документима. Мајклов блог посвећен је дељењу свог знања и стручности са другима, пружајући једноставне савете и упутства за побољшање продуктивности и ефикасности. Без обзира да ли сте искусан професионалац или почетник, Мајклов блог нуди вредне увиде и практичне савете како да на најбољи начин искористите ове основне софтверске алате.