Извлечение чисел из текста в Excel: от простых формул до VBA

Работа с неструктурированными данными в Microsoft Excel часто превращается в головную боль, когда числа «спрятаны» внутри текстовых строк. Типичные примеры: «Заказ №12345 от 01.01.2023», «Вес: 5.2 кг», «Цена 1999 руб. (со скидкой)» или «Температура +23.5°C». Вручную выделять цифры из сотен таких ячеек — нерационально. К счастью, в Excel есть минимум 7 способов автоматизировать эту задачу, и мы разберём их от самого простого к продвинутому.

Эта статья не просто перечислит методы, а поможет выбрать оптимальный подход в зависимости от структуры ваших данных. Например, для строк с фиксированным форматом (как в примере с «Заказ №») хватит функции ПСТР, а для хаотичного текста типа «В корзине 3 яблока, 5 груш и 2 банана» потребуется комбинация из ПОИСК, НАЙТИ и регулярных выражений (если вы готовы использовать VBA). Мы также рассмотрим ловушки, в которые попадают новички — например, почему ЗНАЧЕН не работает с текстом «1 000 руб.» или как обойти ограничения функции ПРЕОБР.

Все примеры протестированы в Excel 2010–2026 (включая Microsoft 365) и адаптированы для русскоязычной версии. Если вы работаете с англоязычным интерфейсом, используйте аналоги функций: LEFT вместо ЛЕВСИМВ, MID вместо ПСТР и т.д. Для удобства мы выделили уникальный приём с пользовательской функцией VBA, который извлекает все числа из текста за один шаг — даже если их несколько в одной ячейке.

1. Простейшие случаи: когда число стоит в начале или конце строки

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

Допустим, у вас есть список артикулов вида «12345-Красный» или «Зелёный-67890», где число всегда отделено тире. Вот как извлечь его:

  • 🔢 Число в начале строки: используйте ЛЕВСИМВ с функцией ПОИСК, чтобы найти позицию первого нецифрового символа:
    =ЛЕВСИМВ(A1; ПОИСК("-"; A1) - 1)

    Для примера «12345-Красный» формула вернёт «12345».

  • 🔢 Число в конце строки: комбинация ПРАВСИМВ и ДЛСТР с вычитанием позиции последнего тире:
    =ПРАВСИМВ(A1; ДЛСТР(A1) - ПОИСК("-"; A1))

    Для «Зелёный-67890» результат — «67890».

  • Бонус: если разделитель не тире, а пробел или другой символ, замените "-" в формулах на " " (пробел) или нужный знак.
⚠️ Внимание: Эти формулы вернут текстовое представление числа. Чтобы преобразовать его в числовой формат для расчётов, оберните результат в функцию ЗНАЧЕН:
=ЗНАЧЕН(ЛЕВСИМВ(A1; ПОИСК("-"; A1) - 1))

Если в ваших данных разделитель между числом и текстом непостоянный (иногда пробел, иногда тире), используйте ПОДСТАВИТЬ, чтобы унифицировать формат перед извлечением:

=ЗНАЧЕН(ЛЕВСИМВ(ПОДСТАВИТЬ(A1; " "; "-"); ПОИСК("-"; ПОДСТАВИТЬ(A1; " "; "-")) - 1))
📊 Как часто вам приходится извлекать числа из текста в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

2. Функции ПСТР и НАЙТИ: для чисел в середине строки

Когда цифры «зажаты» между текстовыми фрагментами (например, «Товар X (количество: 5 шт.)»), пригодятся функции ПСТР (извлечение подстроки) и НАЙТИ/ПОИСК (определение позиций). Этот метод требует знания точного шаблона строки.

Рассмотрим пример с текстом «Артикул: AB-123-XY, вес 15.5 кг», где нужно извлечь «15.5». Алгоритм:

  1. Найти позицию слова «вес» (НАЙТИ("вес"; A1)).
  2. Найти позицию символа «кг» (НАЙТИ("кг"; A1)).
  3. Извлечь подстроку между этими позициями, отступив на длину слова «вес » (4 символа) и добавив 2 символа для пробела перед «кг»:
=ЗНАЧЕН(ПСТР(A1; НАЙТИ("вес"; A1) + 4; НАЙТИ("кг"; A1) - НАЙТИ("вес"; A1) - 6))

Разберём формулу по частям:

  • 📍 НАЙТИ("вес"; A1) + 4 — начало извлечения (после слова «вес »).
  • 📏 НАЙТИ("кг"; A1) - НАЙТИ("вес"; A1) - 6 — длина извлекаемого фрагмента (минус 6 = 4 символа слова «вес» + 2 пробела).
  • 🔄 ЗНАЧЕН — преобразование текста «15.5» в число.
Исходный текст Формула Результат
Артикул: AB-123-XY, вес 15.5 кг =ЗНАЧЕН(ПСТР(A1; НАЙТИ("вес"; A1) + 4; НАЙТИ("кг"; A1) - НАЙТИ("вес"; A1) - 6)) 15.5
Температура: +23.5°C, влажность 60% =ПСТР(A1; НАЙТИ("+"; A1); НАЙТИ("°"; A1) - НАЙТИ("+"; A1)) +23.5
Скидка 20% на товар стоимостью 1999 руб. =ЗНАЧЕН(ПСТР(A1; НАЙТИ("стоимостью "; A1) + 12; НАЙТИ(" руб"; A1) - НАЙТИ("стоимостью "; A1) - 12)) 1999
⚠️ Внимание: Если в тексте несколько вхождений искомого слова (например, дважды встречается «вес»), функция НАЙТИ вернёт позицию первого вхождения. Чтобы найти второе, используйте НАЙТИ с третьим аргументом — позицией, с которой начинать поиск:
=НАЙТИ("вес"; A1; НАЙТИ("вес"; A1) + 1)

3. Регулярные выражения через Power Query (Excel 2016+)

Для пользователей Excel 2016 и новее (включая Microsoft 365) доступен мощный инструмент Power Query, который поддерживает регулярные выражения. Это идеальный вариант, если числа в тексте расположены хаотично или их несколько в одной строке.

Пример: из строки «В наборе 3 карандаша, 5 ручек и 2 ластика» нужно извлечь все числа (3, 5, 2). Алгоритм:

  1. Выделите исходные данные и перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В открывшемся редакторе Power Query выберите столбец с текстом → Преобразовать → Извлечь → Текст по шаблону.
  3. Введите регулярное выражение для чисел: (\d+) (для целых чисел) или (\d+\.?\d*) (для чисел с десятичной частью).
  4. Нажмите ОК и загрузите результат обратно в Excel.

Результат — каждый номер будет в отдельной строке. Чтобы объединить их в одну ячейку через запятую, используйте в Power Query функцию Text.Combine.

Выделить исходный диапазон|Проверить отсутствие пустых строк|Убедиться, что числа не содержат неразрывных пробелов|Сохранить файл перед началом работы-->

Преимущества метода:

  • ✅ Работает с несколькими числами в одной строке.
  • ✅ Поддерживает десятичные дроби и отрицательные числа (регулярка -?\d+\.?\d*).
  • ✅ Можно сохранить запрос и обновлять данные одним кликом.
⚠️ Внимание: Power Query чувствителен к неразрывным пробелам (символ CHAR(160)). Если формулы не работают, замените их на обычные пробелы функцией ПОДСТАВИТЬ(A1; СИМВОЛ(160); " ").

4. Пользовательская функция VBA: универсальное решение

Если вам нужно извлекать числа из текста регулярно и в больших объёмах, стоит один раз написать пользовательскую функцию на VBA. Она будет работать как обычная формула Excel, но с гибкими настройками.

Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и добавьте следующий код:

Function ExtractNumbers(rng As Range) As Variant

Dim strInput As String

Dim strOutput As String

Dim i As Integer

Dim char As String

strInput = rng.Value

strOutput = ""

For i = 1 To Len(strInput)

char = Mid(strInput, i, 1)

If IsNumeric(char) Or char = "." Or char = "," Or char = "-" Then

strOutput = strOutput & char

ElseIf strOutput <> "" Then

strOutput = strOutput & " "

End If

Next i

' Удаляем лишние пробелы и преобразуем в массив

strOutput = Application.WorksheetFunction.Trim(strOutput)

If strOutput = "" Then

ExtractNumbers = 0

Else

ExtractNumbers = Split(strOutput, " ")

End If

End Function

Теперь в Excel можно использовать функцию =ExtractNumbers(A1). Особенности:

  • 🔢 Извлекает все числа из текста, включая отрицательные и дробные.
  • 📌 Возвращает результат в виде массива (если чисел несколько, они будут в одной ячейке через пробел).
  • ⚡ Работает с русскими и английскими разделителями (точка и запятая).

Пример работы:

Исходный текст Формула Результат
Заказ №123 на сумму 5000.50 руб., вес 2.3 кг =ExtractNumbers(A1) 123 5000.50 2.3
Температура колеблется от -5°C до +10.5°C =ExtractNumbers(A1) -5 10.5

5. Формулы массива: извлечение первого/последнего числа

Если вам нужно только первое или последнее число в строке, можно обойтись без VBA, используя формулы массива. Этот метод требует подтверждения клавишами Ctrl+Shift+Enter (в новых версиях Excel работает и без этого).

Извлечение первого числа:

=МИН(ЕСЛИОШИБКА(ЗНАЧЕН(ПСТР(0&$A1; СТРОКА($1:$10); 1)); ""))

Формула проверяет каждый символ строки на возможность преобразования в число и возвращает минимальное найденное значение (первое по порядку).

Извлечение последнего числа:

=МАКС(ЕСЛИОШИБКА(ЗНАЧЕН(ПСТР(0&$A1; СТРОКА($1:$10); 1)); ""))

Как это работает:

  • 🔍 ПСТР(0&$A1; СТРОКА($1:$10); 1) — извлекает каждый символ строки по очереди (для первых 10 символов; при необходимости увеличьте диапазон до $1:$100).
  • 🔄 ЗНАЧЕН пытается преобразовать символ в число (успешно только для цифр, точек, запятых).
  • ЕСЛИОШИБКА игнорирует ошибки (для нецифровых символов).
  • 📈 МИН/МАКС возвращает первое/последнее число.
⚠️ Внимание: Эти формулы не работают с отрицательными числами! Для них потребуется модификация с учётом символа «-»:

=МИН(ЕСЛИОШИБКА(ЗНАЧЕН(ЕСЛИ(ПСТР($A1; СТРОКА($1:$10); 1)="-"; ПСТР($A1; СТРОКА($1:$10); 2); ПСТР($A1; СТРОКА($1:$10); 1))); ""))

6. Обработка чисел с разделителями тысяч

Особый случай — числа с пробелами или другими разделителями тысяч (например, «1 000 000 руб.» или «1,000,000»). Стандартные функции вроде ЗНАЧЕН не справляются с такими строками. Решение — удалить разделители перед преобразованием.

Формула для русского формата (пробелы):

=ЗНАЧЕН(ПОДСТАВИТЬ(A1; " "; ""))

Для английского формата (запятые):

=ЗНАЧЕН(ПОДСТАВИТЬ(A1; ","; ""))

Если разделители тысяч и десятичные знаки совпадают (например, «1.000,50» в европейском формате), используйте вложенные ПОДСТАВИТЬ:

=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; "."; ""); ","; "."))

Для сложных случаев (например, «1 234 567,89 руб.») комбинируйте функции:

=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; " "; ""); " руб."; ""); ","; "."))
Как определить разделитель тысяч в вашей системе?

В Excel перейдите в Файл → Параметры → Дополнительно → Параметры редактирования и посмотрите настройку «Разделитель тысяч».

7. Продвинутые приёмы: извлечение чисел с учётом контекста

Иногда числа нужно извлекать не просто так, а с учётом контекста. Например, из строки «Цена: 1000 руб., скидка 10%, итого 900 руб.» требуется только итоговая сумма (900). Здесь поможет комбинация функций для поиска ключевых слов.

Формула для извлечения числа после слова «итого»:

=ЗНАЧЕН(ПСТР(A1; НАЙТИ("итого"; A1) + 6; НАЙТИ(" руб"; A1; НАЙТИ("итого"; A1)) - (НАЙТИ("итого"; A1) + 6)))

Аналогично можно извлекать:

  • 💰 Цены: ищите слова «цена», «стоимость», «руб.».
  • 📦 Количество: ключевые слова «шт.», «кол-во», «ед.»
  • 📅 Даты: если дата записана как текст («15 января 2023»), используйте ДАТАЗНАЧ после извлечения.

Для извлечения диапазонов чисел (например, «от 10 до 20») используйте:

=ЗНАЧЕН(ПСТР(A1; НАЙТИ("от "; A1) + 3; НАЙТИ(" до "; A1) - НАЙТИ("от "; A1) - 3))  ' первое число

=ЗНАЧЕН(ПСТР(A1; НАЙТИ("до "; A1) + 3; ДЛСТР(A1))) ' второе число

FAQ: Частые вопросы по извлечению чисел

Можно ли извлечь числа из текста без формул?

Да, есть три способа без формул:

  1. Текст по столбцам: Данные → Текст по столбцам, выберите разделитель (например, пробел) и укажите формат столбца «Текстовый» или «Общий».
  2. Найти и заменить: Удалите весь текст, оставив только цифры (замените все буквы на пустоту с помощью Ctrl+H).
  3. Power Query: Как описано в разделе 3, с использованием регулярных выражений.

Однако эти методы менее гибкие, чем формулы, и требуют ручной настройки под каждый случай.

Почему функция ЗНАЧЕН возвращает ошибку #ЗНАЧ!?

Ошибка возникает в трёх случаях:

  • Текст содержит недопустимые символы (например, «1 000 руб.» — пробел мешает преобразованию). Решение: удалите лишние символы функцией ПОДСТАВИТЬ.
  • Число записано с нестандартным разделителем (например, «1,234.56» вместо «1 234,56»). Решение: унифицируйте разделители.
  • Ячейка пустая или содержит только текст. Решение: добавьте проверку ЕСЛИ(A1=""; 0; ЗНАЧЕН(A1)).
Как извлечь число из текста, если оно записано словами (например, «пять»)?

Excel не умеет автоматически преобразовывать текстовые числа («один», «два») в цифры. Решения:

  1. Ручной ввод: Создайте таблицу соответствий (например, «один» = 1) и используйте ВПР.
  2. VBA: Напишите функцию с массивом замен (пример кода можно найти на форумах по запросу «convert russian words to numbers excel vba»).
  3. Сервисы онлайн: Скопируйте текст в инструменты вроде Text-to-Numbers Converter (применимо для разовых задач).

Для русского языка задача усложняется склонениями («пять», «пяти», «пятью»), поэтому универсального решения без VBA нет.

Можно ли извлечь числа из PDF или Word в Excel?

Да, но потребуются промежуточные шаги:

  1. Скопируйте данные из PDF/Word в Excel (иногда помогает вставка через Специальная вставка → Текст).
  2. Если текст вставляется в одну ячейку, используйте Текст по столбцам (разделитель — знак абзаца Ctrl+J).
  3. Для PDF с таблицами используйте специализированные инструменты вроде Adobe Acrobat (экспорт в Excel) или Tabula (бесплатный инструмент для извлечения таблиц).

Обратите внимание: при копировании из PDF часто теряются пробелы и перenosы, что может исказить структуру данных.

Как автоматизировать извлечение чисел для больших файлов?

Для обработки тысяч строк:

  • Макросы: Запишите макрос для вашей формулы (на вкладке Вид → Макросы → Записать макрос) и примените его ко всему столбцу.
  • Power Query: Создайте запрос один раз и обновляйте его по мере изменения данных.
  • Python: Для очень больших файлов (100 000+ строк) используйте библиотеку pandas с регулярными выражениями. Пример кода:
    import pandas as pd
    

    df = pd.read_excel("file.xlsx")

    df['numbers'] = df['text'].str.extractall(r'(\d+\.?\d*)')[0].groupby(level=0).agg(list)