Excel: Извличане на число от текстов низ

  • Споделя Това
Michael Brown

В урока е показано как да извлечете число от различни текстови низове в Excel с помощта на формули и инструмента Извличане.

Когато става въпрос за извличане на част от текстов низ с дадена дължина, Excel предоставя три функции Substring (Left, Right и Mid) за бързо справяне със задачата. Когато става въпрос за извличане на числа от буквено-цифров низ, Microsoft Excel не предоставя... нищо.

За да получите число от низ в Excel, са необходими малко изобретателност, малко търпение и множество различни функции, вложени една в друга. Или можете да стартирате инструмента Extract и да свършите работата с едно щракване на мишката. По-долу ще намерите пълна информация за двата метода.

    Как да извлечете номер от края на текстов низ

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

    ПРАВИЛНО( клетка , LEN( клетка ) - MAX(IF(ISNUMBER(MID( клетка , ROW(INDIRECT("1:"&LEN( клетка ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( клетка ))), 0)))

    Ще се спрем на логиката на формулата малко по-късно. Засега просто заменете клетка с препратка към клетката, съдържаща оригиналния низ (A2 в нашия случай), и въведете формулата във всяка празна клетка на същия ред, например в B2:

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

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

    Извличането се извършва с функцията RIGHT, която принадлежи към категорията на функциите Text. Изходът на тази функция винаги е текст В нашия случай резултатът е цифров подниз , което от гледна точка на Excel също е текст, а не число.

    Ако резултатът трябва да бъде номер (който можете да използвате при по-нататъшни изчисления), след което вкарайте формулата във функцията VALUE или извършете аритметична операция, която не променя резултата, например умножете по 1 или добавете 0. За да уловите грешки в низове, които не съдържат нито едно число, използвайте функцията IFERROR. Например:

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

    Забележка: В Excel Dynamic Array (Office 365 и 2021) въвеждате формулата по обичайния начин с клавиша Enter. В Excel 2019 и по-ранни версии тя работи само като формула за масив, така че не забравяйте да натиснете Ctrl + Shift + Enter, за да я завършите.

    Как работи тази формула:

    За да извлечете число от буквено-цифров низ, първото нещо, което трябва да знаете, е откъде да започнете извличането. Позицията на последния нецифров символ в низ се определя с помощта на тази сложна формула:

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

    За да разберем логиката, нека я разгледаме отвътре:

    Комбинацията ROW(INDIRECT("1:"&LEN(A2))) създава последователност от числа, съответстващи на общия брой символи в изходния низ (A2), и подаваме тези последователни числа на MID като начални числа:

    MID(A2, {1;2;3;4;5;6;7;8}, 1)

    Функцията MID извлича всеки отделен символ от A2 и го връща като масив:

    {"0";"5";"-";"E";"C";"-";"0";"1"}

    Тъй като MID е текстова функция, нейният изход винаги е текст (както можете да забележите, всички символи са затворени в кавички). За да превърнем числовите единици в числа, умножаваме масива по 1 (двойното отрицание --MID() ще има същия ефект). Резултатът от тази операция е масив от числа и грешки #VALUE!, представляващи нечислови символи:

    ISNUMBER({0;5;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;0;1})

    Функцията ISNUMBER оценява всеки елемент от масива и дава решението си под формата на булеви стойности - TRUE за числа, FALSE за всичко останало:

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

    Този масив преминава към логическия тест на функцията IF, при който всеки елемент от масива се сравнява с FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    За всяка стойност FALSE (нецифрова стойност) друга функция ROW(INDIRECT()) връща относителната ѝ позиция в низа. За всяка стойност TRUE (цифрова стойност) се връща нула. Полученият масив изглежда по следния начин:

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

    Останалото е лесно. Функцията MAX намира най-голямото число в горния масив, което е позицията на последната нецифрова стойност в низа (6 в нашия случай). Просто извадете тази позиция от общата дължина на низа, върната от LEN, и предайте резултата на RIGHT, за да знаете колко символа да извлечете от дясната страна на низа:

    RIGHT(A2, LEN(A2) - 6)

    Готово!

    Как да извлечете число от началото на текстов низ

    Ако работите със записи, в които текстът се появява след числото, можете да извлечете числото от началото на низ, като използвате тази обща формула:

    ЛЯВО( клетка , MATCH(FALSE, ISNUMBER(MID( клетка , ROW(INDIRECT("1:"&LEN( клетка )+1)), 1) *1), 0) -1)

    Като използвате оригиналния низ в A2, използвайте следната формула, за да получите числото:

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

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

    Забележка: В Excel 365 и Excel 2021, поради поддръжката на динамични масиви, обикновената формула работи добре. В Excel 2019 и по-ранни версии трябва да натиснете Ctrl + Shift + Enter, за да я превърнете в формула за масив .

    Как работи тази формула:

    Тук отново използваме комбинацията от функциите ROW, INDIRECT и LEN, за да създадем поредица от числа, равна на общия брой символи в изходния низ плюс 1 (ролята на този допълнителен символ ще стане ясна малко по-късно).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID и ISNUMBER вършат същата работа, както в предишния пример - MID извлича отделните символи, а ISNUMBER ги преобразува в логически стойности. Полученият масив от TRUE и FALSE отива във функцията MATCH като масив за търсене:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)

    MATCH изчислява относителната позиция на първия FALSE, като ни дава позицията на първия нецифров символ в низа (3 в A2). За да извлечем предходните числа, изваждаме 1 от позицията на първия текстов символ и подаваме разликата към num_chars аргумент на функцията LEFT:

    ЛЯВО(A2, 3-1)

    Сега да се върнем към "допълнителния" символ в последователността, генерирана от ROW(INDIRECT()+1)). Както вече знаете, тази последователност осигурява началните точки за функцията MID. Без +1 MID ще извлече точно толкова символи, колкото има в оригиналния низ. Ако низът съдържа само числа, ISNUMBER ще върне само TRUE, докато MATCH се нуждае от поне един FALSE. За да гарантираме това, добавяме единоще един символ до общата дължина на низа, който функцията MID ще преобразува в празен низ. Например в B7 MID връща този масив:

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

    Забележка. Както и при функцията RIGHT, LEFT също връща цифров подниз За да получите резултата като число, а не като цифров низ, вложете формулата във функцията VALUE или умножете резултата по 1, както е показано в първия пример.

    Как да получите число от всяка позиция в низ

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

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

    Където A2 е оригиналният текстов низ.

    Разбирането на тази формула би изисквало отделна статия, затова можете просто да я копирате в работния си лист, за да се уверите, че тя наистина работи :)

    След като разгледате резултатите обаче, може да забележите един незначителен недостатък - ако изходният низ не съдържа число, формулата връща нула, както на ред 6 в горната снимка. За да поправите това, можете да обвиете формулата в изявлението IF, чийто логически тест проверява дали изходният низ съдържа някакво число. Ако е така, формулата извлича числото, в противен случай връща празнониз:

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

    Както е показано на снимката на екрана по-долу, подобрената формула работи чудесно (поздравления за това подобрение на Алекс, нашия гуру на Excel):

    За разлика от всички предишни примери, резултатът от тази формула е номер За да се уверите в това, просто обърнете внимание на подравнените надясно стойности в колона В и на съкратените водещи нули.

    Съвет: В Excel 365 - Excel 2019 има много по-просто решение с помощта на функцията TEXTJOIN. Моля, вижте Как да премахнете текст и да запазите числата.

    Извличане на номер от текстов низ с Ultimate Suite

    Както току-що видяхте, не съществува тривиална формула на Excel за извличане на число от текстов низ. Ако ви е трудно да разберете формулите или да ги коригирате за вашите набори от данни, може да ви хареса този прост начин за извличане на число от низ в Excel.

    С нашия Ultimate Suite, добавен към лентата на Excel, можете бързо да извлечете число от всеки буквено-цифров низ:

    1. Отидете в Данни от Ablebits tab> Текст и щракнете върху Извлечение :

    2. Изберете всички клетки с изходните низове.
    3. В прозореца на инструмента Извличане изберете Извлечение на номера радио бутон.
    4. В зависимост от това дали искате резултатите да бъдат формули или стойности, изберете Вмъкване като формула или го оставете неизбрано (по подразбиране).

      Моят съвет е да изберете това поле, ако искате извлечените числа да се актуализират автоматично, веднага щом бъдат направени някакви промени в изходните низове. Ако искате резултатите да бъдат независими от изходните низове (например в случай, че планирате да премахнете изходните данни на по-късен етап), тогава не избирайте това поле.

    5. Щракнете върху Вмъкване на резултати бутон. Готово!

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

    В този пример избрахме да вмъкнем резултатите като стойности , а добавката направи точно това, което беше поискано:

    Ако Вмъкване като формула е избрано квадратчето за отметка, ще наблюдавате формула в лентата с формулите. Любопитно ви е да разберете коя е тя? Просто изтеглете пробната версия на Ultimate Suite и се убедете сами :)

    Налични изтегляния

    Excel Extract Number - примерна работна книга (.xlsx файл)

    Ultimate Suite - пробна версия (.exe файл)

    Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.