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, которая относится к категории текстовых функций. Выходом этой функции всегда является текст В нашем случае результатом является числовая подстрока , что в терминах 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;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;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):

    В отличие от всех предыдущих примеров, результатом этой формулы является номер Чтобы убедиться в этом, обратите внимание на выровненные по правому краю значения в столбце B и усеченные ведущие нули.

    Совет. В Excel 365 - Excel 2019 есть гораздо более простое решение с помощью функции ТЕКСТДЖОЙН. См. раздел Как удалить текст и сохранить цифры.

    Извлечение номера из текстовой строки с помощью Ultimate Suite

    Как вы только что убедились, не существует тривиальной формулы Excel для получения числа из текстовой строки. Если у вас есть трудности с пониманием формул или их настройкой для ваших наборов данных, вам может понравиться этот простой способ получения числа из строки в Excel.

    С помощью нашего пакета Ultimate Suite, добавленного на ленту Excel, вы можете быстро извлечь число из любой буквенно-цифровой строки:

    1. Перейти к Ablebits Data вкладка> Текст группу, и нажмите кнопку Выписка :

    2. Выделите все ячейки с исходными строками.
    3. На панели инструмента "Извлечение" выберите пункт Номера экстрактов радиокнопка.
    4. В зависимости от того, хотите ли вы, чтобы результаты были формулами или значениями, выберите параметр Вставить как формулу или оставить его не выбранным (по умолчанию).

      Я советую установить этот флажок, если вы хотите, чтобы извлеченные числа обновлялись автоматически, как только в исходные строки будут внесены какие-либо изменения. Если вы хотите, чтобы результаты не зависели от исходных строк (например, в случае, если вы планируете удалить исходные данные в более поздний момент), то не устанавливайте этот флажок.

    5. Нажмите кнопку Результаты вставки Кнопка. Готово!

    Как и в предыдущем примере, результатами извлечения являются номера Это означает, что вы можете свободно считать, суммировать, усреднять или выполнять любые другие вычисления с ними.

    В этом примере мы выбрали вставку результатов в виде значения , и дополнение сделало именно то, о чем просили:

    Если Вставить как формулу флажок был установлен, вы наблюдаете формула Любопытно узнать, какой именно? Просто скачайте пробную версию Ultimate Suite и убедитесь сами :)

    Доступные загрузки

    Excel Extract Number - образец рабочей книги (файл.xlsx)

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

    Майкл Браун — увлеченный технологический энтузиаст, стремящийся упростить сложные процессы с помощью программных инструментов. Имея более чем десятилетний опыт работы в технологической отрасли, он отточил свои навыки в Microsoft Excel и Outlook, а также в Google Sheets и Docs. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.