Извлечь числа из текста в Excel
Возможности !SEMTools
↑ Навигация по задачам в Excel и возможностям надстройки !SEMTools ↑

Убрать буквы из ячейки Excel и оставить только цифры в Excel 365 можно формулой =СЦЕП(ЕСЛИОШИБКА(--ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1);"")): она перебирает символы строки и склеивает только те, что превращаются в число. Тот же результат даёт регулярное выражение =REGEXREPLACE(A2;"[^\d]";"") — в Excel 365 это встроенная функция РЕГЗАМЕНИТЬ, в более ранних версиях она появляется вместе с бесплатной !SEMTools. Первое число из текста извлекает =REGEXEXTRACT(A2;"\d+"), а прямо в исходных ячейках цифры оставляет процедура !SEMTools в один клик.

Оставить цифры заменой остальных символов

Самым неоптимальным способом стала бы последовательная замена всех символов на «пустоту». Если лишних символов немного и вы умеете быстро печатать, можно обойтись и таким образом :) Но статья, конечно же, не о таких кейсах. Если данных тысячи строк и лишних символов много, такой подход приведет к трате огромного количества времени.

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

Оставить в ячейке только цифры формулой

В Excel 365 и 2021 формула короткая: ПОСЛЕД создаёт номера символов от 1 до длины строки, ПСТР вынимает каждый символ, два минуса пытаются превратить его в число, ЕСЛИОШИБКА отбрасывает не-цифры, а СЦЕП склеивает оставшиеся:

Извлечь цифры из текста
B3=СЦЕП(ЕСЛИОШИБКА(--ПСТР(A3;ПОСЛЕД(ДЛСТР(A3));1);""))
ABC
1Исходный текстТолько цифрыПервое число
2Артикул 4512-B4512=СЦЕП(ЕСЛИОШИБКА(--ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1);""))4512=REGEXEXTRACT(A2;"\d+")
3Тел.: +7 (912) 345-67-8979123456789=СЦЕП(ЕСЛИОШИБКА(--ПСТР(A3;ПОСЛЕД(ДЛСТР(A3));1);""))7=REGEXEXTRACT(A3;"\d+")
4Заказ №1024 от 05.1010240510=СЦЕП(ЕСЛИОШИБКА(--ПСТР(A4;ПОСЛЕД(ДЛСТР(A4));1);""))1024=REGEXEXTRACT(A4;"\d+")

В B3 из телефона получилось 79123456789. В B4 обратите внимание: номер заказа и дата склеились в одно «10240510» — если чисел в ячейке несколько, берите первое (столбец C) или используйте процедуру, которая ставит между числами пробел.

В английском Excel: =CONCAT(IFERROR(--MID(A2,SEQUENCE(LEN(A2)),1),""))

В Excel 2019 функции ПОСЛЕД нет — номера символов создают через СТРОКА и ДВССЫЛ, а формулу вводят сочетанием Ctrl+Shift+Enter:

=СЦЕП(ЕСЛИОШИБКА(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)+0;""))
Только цифры в Excel 2019
B2=СЦЕП(ЕСЛИОШИБКА(ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1)+0;""))
AB
1ТекстТолько цифры
2Заказ №125 от 21.101252110=СЦЕП(ЕСЛИОШИБКА(ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1)+0;""))
3тел. 8 (916) 123-45-6789161234567=СЦЕП(ЕСЛИОШИБКА(ПСТР(A3;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A3)));1)+0;""))

СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2))) создаёт номера символов, как ПОСЛЕД в Excel 365. Вводите формулу сочетанием Ctrl+Shift+Enter. Все цифры склеиваются в одну строку.

Механика её работы:

  1. Сначала измеряется длина текстового значения ячейки функцией ДЛСТР
  2. Далее создается текстовое выражение диапазона строк с помощью конкатенации амперсандом (&)
  3. Это текстовое выражение преобразуется в реальный диапазон функцией ДВССЫЛ
  4. Функция СТРОКА возвращает массив чисел от 1 до числа, соответствующего концу этого диапазона
  5. Функция ПСТР извлекает по этому массиву чисел соответствующие символы по порядку
  6. К каждому символу прибавляется 0 - это позволяет отличить цифры от остальных символов, т.к. цифры не вернут ошибку, а все остальные вернут
  7. Функция ЕСЛИОШИБКА заменяет все ошибки на пустые строки
  8. В финале функция СЦЕП объединяет массив в единую строку

В Excel 2016 и раньше нет и СЦЕП — там помогут пользовательская функция или регулярные выражения ниже.

Извлечь число с дробной частью

Формула выше отбрасывает десятичную запятую, и «1,5» превращается в «15». Чтобы сохранить дробную часть, разрешаем формуле оставлять не только цифры, но и запятую (Excel 365):

Число с десятичной запятой
B2=СЦЕП(ЕСЛИ(ЕЧИСЛО(--ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1))+(ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1)=",");ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1);""))
ABC
1ТоварОбъёмКак число
2Сок апельсиновый 1,5 л1,5=СЦЕП(ЕСЛИ(ЕЧИСЛО(--ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1))+(ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1)=",");ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1);""))1,5=--B2
3Вода 0,33 л0,33=СЦЕП(ЕСЛИ(ЕЧИСЛО(--ПСТР(A3;ПОСЛЕД(ДЛСТР(A3));1))+(ПСТР(A3;ПОСЛЕД(ДЛСТР(A3));1)=",");ПСТР(A3;ПОСЛЕД(ДЛСТР(A3));1);""))0,33=--B3
4Молоко 2 л2=СЦЕП(ЕСЛИ(ЕЧИСЛО(--ПСТР(A4;ПОСЛЕД(ДЛСТР(A4));1))+(ПСТР(A4;ПОСЛЕД(ДЛСТР(A4));1)=",");ПСТР(A4;ПОСЛЕД(ДЛСТР(A4));1);""))2=--B4

ЕЧИСЛО отбирает цифры, сравнение с «,» — запятые. Если запятая встречается и в тексте («Сок, 1,5 л»), она тоже попадёт в результат — для таких данных надёжнее регулярное выражение ниже.

В английском Excel: =CONCAT(IF(ISNUMBER(--MID(A2,SEQUENCE(LEN(A2)),1))+(MID(A2,SEQUENCE(LEN(A2)),1)=","),MID(A2,SEQUENCE(LEN(A2)),1),""))

Если десятичный разделитель в данных — точка, замените «,» в формуле на «.», а результат переведите в число с помощью замены точки на запятую.

Извлечь числа пользовательскими функциями (UDF)

В любой версии Excel, включая 2010–2016, цифры извлекает пользовательская функция на VBA. Она возвращает текст, поэтому ведущие нули сохраняются, а длинные номера не обрезаются:

Function extrNum(x As String) As String
    Dim n As Long
    For n = 1 To Len(x)
        If Mid(x, n, 1) Like "#" Then extrNum = extrNum & Mid(x, n, 1)
    Next n
End Function

Как применить данный код:

  1. внедрить его в новый модуль книги (используемой сейчас или в личной книге макросов),
  2. применить функцию на листе в подобном виде: =extrNum(A1).

Извлечь числа регулярными выражениями

Регулярные выражения — отличный помощник при работе с текстовыми данными. Их синтаксис для обработки простых паттернов довольно прост, но возможностей все усложнить предостаточно.

В Excel 365 есть встроенные РЕГЗАМЕНИТЬ (REGEXREPLACE) и РЕГИЗВЛЕЧЬ (REGEXEXTRACT). В более ранних версиях такие функции есть в платной и бесплатной версии !SEMTools:

  • regexReplace, берущая на вход 3 аргумента — строку с данными, текст регулярного выражения и строку для замены;
  • regexExtract с двумя обязательными аргументами — строкой и паттерном для извлечения.

Удалить все символы, кроме цифр, регуляркой

Выражение для замены любых символов, кроме цифр, на пустоту, будет выглядеть следующим образом:

=REGEXREPLACE(A1;"[^\d]";"")
Удалить всё, кроме цифр, регуляркой
B2=REGEXREPLACE(A2;"[^\d]";"")
AB
1ТекстБез нецифр
2Артикул А-1078/210782=REGEXREPLACE(A2;"[^\d]";"")
3тел. 8 (916) 123-45-6789161234567=REGEXREPLACE(A3;"[^\d]";"")

[^\d] — любой символ, кроме цифры. Результат — текст; чтобы получить число, поставьте перед формулой два минуса.

В английском Excel: =REGEXREPLACE(A2,"[^\d]","")

Взять первое число в ячейке регуляркой

Выражение для извлечения первой сплошной последовательности цифр:

=REGEXEXTRACT(A1;"\d+")
Первое число в ячейке
B2=REGEXEXTRACT(A2;"\d+")
AB
1ТекстПервое число
2Заказ 125 от 21.10125=REGEXEXTRACT(A2;"\d+")
3Комната 7, этаж 37=REGEXEXTRACT(A3;"\d+")
4без цифр#Н/Д=REGEXEXTRACT(A4;"\d+")

\d+ — одна или больше цифр подряд; функция берёт первое совпадение. Если цифр нет, она возвращает #Н/Д — оберните её в ЕСЛИОШИБКА.

В английском Excel: =REGEXEXTRACT(A2,"\d+")

Извлечь числа с плавающей запятой

Для извлечения чисел с плавающей запятой (включая целые) вместе с единицами измерения (например, "л", "литр", "литров") из текста в Excel также можно использовать регулярные выражения через функцию REGEXEXTRACT.

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

Например, для строки "Сок 1.5 л апельсиновый" нужно извлечь "1.5 л". Шаблон регулярного выражения должен учитывать:

  • Числа с плавающей точкой (например, 0.5, 1.0, 2.75).
  • Возможное наличие целой части и дробной части (после точки).
  • Единицы измерения (например, "л", "мл"), которые могут следовать сразу после числа или через пробел.

Базовая формула:

=REGEXEXTRACT(A1;"\d+\.\d+\sл")
Извлечь числа с плавающей запятой с помощью регулярного выражения в Excel

Более надёжный вариант, если единицы могут быть разные:

=REGEXEXTRACT(A1;"\d*\.?\d+\s*м*л(итр(ов|а)?)?(\s|$)")
Объём с единицами измерения
C3=REGEXEXTRACT(A3;"\d*\.?\d+\s*м*л(итр(ов|а)?)?(\s|$)")
ABC
1ОписаниеБазовый шаблонНадёжный шаблон
2Сок 1.5 л апельсиновый1.5 л=REGEXEXTRACT(A2;"\d+\.\d+\sл")1.5 л=REGEXEXTRACT(A2;"\d*\.?\d+\s*м*л(итр(ов|а)?)?(\s|$)")
3Вода 500мл#Н/Д=REGEXEXTRACT(A3;"\d+\.\d+\sл")500мл=REGEXEXTRACT(A3;"\d*\.?\d+\s*м*л(итр(ов|а)?)?(\s|$)")
4Молоко 0.9 литра0.9 л=REGEXEXTRACT(A4;"\d+\.\d+\sл")0.9 литра=REGEXEXTRACT(A4;"\d*\.?\d+\s*м*л(итр(ов|а)?)?(\s|$)")

Базовый шаблон требует дробное число и пробел перед «л», поэтому «500мл» он не находит. Надёжный шаблон принимает целые числа, «мл», «литра» и запись без пробела.

Тогда функция будет обрабатывать и литры и миллилитры, в т.ч. будет учитывать ситуации, когда нет пробела между числом и единицей, и не извлекать ложные совпадения, например 12 лет (выдержки).

Извлечь числа с единицей измерения, более сложное регулярное выражение

Для русской записи с запятой замените в шаблоне «\.» на «,» или на «[.,]», чтобы подходили оба разделителя. Возможно, после этого вам понадобится отделить текст от цифр в ячейках.

Извлечь цифры из текста в 1 клик с !SEMTools

Пользователям платной версии !SEMTools доступна возможность извлекать цифры моментально прямо "на месте", не прописывая никаких функций.

Макрос находится в группе «ИЗВЛЕЧЬ» в меню "Извлечь символы".

Извлечь цифры в Excel - меню надстройки !SEMTools

Видеоинструкция

Удалить текст, а цифры оставить — именно такова механика алгоритма !SEMTools. Если между цифрами были пробелы или другие нецифровые символы, на всякий случай, вместо них остается один пробел. Будет полезно, если в ячейках могут присутствовать несколько чисел, и важно, чтобы они не склеились в одно число. Смотрите пример на видео ниже:

Извлечение цифр из ячеек со смешанным содержимым в !SEMTools

Если вам нужны вообще только цифры, их можно далее удалить заменой на пустоту с помощью процедуры "Найти и заменить".

Почему извлечённые цифры работают не так, как ожидалось

  • Числа склеились. Формулы «только цифры» объединяют все цифры строки: «№1024 от 05.10» превратится в «10240510». Если чисел несколько, извлекайте первое через REGEXEXTRACT или разделяйте их пробелом.
  • Результат не суммируется. СЦЕП, REGEXREPLACE и пользовательская функция возвращают текст. Чтобы получить число, добавьте два минуса: =--REGEXREPLACE(A2;"[^\d]";""). Но для артикулов и телефонов оставляйте текст — иначе пропадут ведущие нули.
  • Ошибка #ИМЯ?. В вашей версии Excel нет функции из формулы: ПОСЛЕД и РЕГЗАМЕНИТЬ — только в Excel 365, СЦЕП — с Excel 2019. Используйте вариант для своей версии или функции !SEMTools.
  • Длинный номер превратился в 7,91235E+10. Excel показывает большие числа в экспоненциальном формате, а после 15 цифр теряет точность. Храните номера карт, счетов и телефонов как текст.
Число с дробной частью и цифры как число
B2=REGEXEXTRACT(A2;"\d+([.,]\d+)?")
ABC
1ТекстЧисло с дробьюВсе цифры числом
2Вес 2,5 кг2,5=REGEXEXTRACT(A2;"\d+([.,]\d+)?")25=--REGEXREPLACE(A2;"[^\d]";"")
3Цена 1.99 $1.99=REGEXEXTRACT(A3;"\d+([.,]\d+)?")199=--REGEXREPLACE(A3;"[^\d]";"")

[.,] допускает и точку, и запятую. Два минуса превращают текст из цифр в число, но десятичный разделитель при этом теряется.

Извлечь цифры из ячейки — частые вопросы

Как убрать буквы из ячейки и оставить цифры?

В Excel 365 — формулой =СЦЕП(ЕСЛИОШИБКА(--ПСТР(A2;ПОСЛЕД(ДЛСТР(A2));1);"")) или =РЕГЗАМЕНИТЬ(A2;"[^\d]";""). В других версиях — пользовательской функцией VBA или функцией REGEXREPLACE из !SEMTools.

Как извлечь первое число из текста?

Регулярным выражением: =REGEXEXTRACT(A2;"\d+"). Для числа с дробной частью — =REGEXEXTRACT(A2;"\d+([.,]\d+)?").

Как оставить только цифры без формул?

Процедурой !SEMTools «Извлечь цифры»: она меняет данные прямо в ячейках и ставит пробел между отдельными числами, чтобы они не склеились.

Как превратить извлечённые цифры в число?

Добавьте перед формулой два минуса: =--REGEXREPLACE(A2;"[^\d]";"").

Оставить в ячейках только цифры — без СЦЕП, ПОСЛЕД и регулярных выражений — можно в один клик с !SEMTools: прямо в исходных ячейках, а несколько чисел в одной ячейке не склеятся.
!SEMTools решает эту и сотни других задач в пару кликов!

Итоги: как извлечь цифры из текста в Excel

Надеюсь, на этой странице вы нашли то, что искали, и смогли оставить в ячейках только цифры. Коротко о выборе способа:

Версия и задачаСпособ
Excel 365, все цифрыСЦЕП + ПОСЛЕД или РЕГЗАМЕНИТЬ
Excel 2019СЦЕП + СТРОКА(ДВССЫЛ) с Ctrl+Shift+Enter
Excel 2010–2016Функция VBA или REGEXREPLACE из !SEMTools
Первое число или число с единицей измеренияREGEXEXTRACT
Прямо в ячейках, без формул!SEMTools: 1 клик

Вас наверняка заинтересуют и обратные задачи: удалить цифры из текста и найти ячейки с числами.

7 комментариев:

Возможно при помощи надстройки вытащить все числа с плавающей запятой из текста?

Если вы про UDF:
Если число начинается с 0, числовой результат будет без 0, так как числа с нулей не начинаются в принципе.
Если число начинается с 7, все работает корректно.

Большое спасибо! нужный эффект получен! самые точные описания и рабочие формулы беру только у вас!

Функция VBA у меня обнуляет результат, когда в тексте встречается 0.
Исправленный макрос такой. Добавлена промежуточная переменная, и возвращаемый тип изменён на строку. Так не потеряются начальные нули.

Function extrNum(x As String) As String
For n = 1 To Len(x)
If Mid(x, n, 1) Like «#» Then varNum = varNum & Mid(x, n, 1)
Next n

extrNum = varNum

End Function

Формула работает только до 9, начиная с двухзначных символов выдает пустые ячейки. (10, 11,12 и т.д.)

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*