Работа с неструктурированными данными в 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))
2. Функции ПСТР и НАЙТИ: для чисел в середине строки
Когда цифры «зажаты» между текстовыми фрагментами (например, «Товар X (количество: 5 шт.)»), пригодятся функции ПСТР (извлечение подстроки) и НАЙТИ/ПОИСК (определение позиций). Этот метод требует знания точного шаблона строки.
Рассмотрим пример с текстом «Артикул: AB-123-XY, вес 15.5 кг», где нужно извлечь «15.5». Алгоритм:
- Найти позицию слова «вес» (
НАЙТИ("вес"; A1)). - Найти позицию символа «кг» (
НАЙТИ("кг"; A1)). - Извлечь подстроку между этими позициями, отступив на длину слова «вес » (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). Алгоритм:
- Выделите исходные данные и перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query выберите столбец с текстом →
Преобразовать → Извлечь → Текст по шаблону. - Введите регулярное выражение для чисел:
(\d+)(для целых чисел) или(\d+\.?\d*)(для чисел с десятичной частью). - Нажмите
ОКи загрузите результат обратно в 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: Частые вопросы по извлечению чисел
Можно ли извлечь числа из текста без формул?
Да, есть три способа без формул:
- Текст по столбцам:
Данные → Текст по столбцам, выберите разделитель (например, пробел) и укажите формат столбца «Текстовый» или «Общий». - Найти и заменить: Удалите весь текст, оставив только цифры (замените все буквы на пустоту с помощью
Ctrl+H). - Power Query: Как описано в разделе 3, с использованием регулярных выражений.
Однако эти методы менее гибкие, чем формулы, и требуют ручной настройки под каждый случай.
Почему функция ЗНАЧЕН возвращает ошибку #ЗНАЧ!?
Ошибка возникает в трёх случаях:
- Текст содержит недопустимые символы (например, «1 000 руб.» — пробел мешает преобразованию). Решение: удалите лишние символы функцией
ПОДСТАВИТЬ. - Число записано с нестандартным разделителем (например, «1,234.56» вместо «1 234,56»). Решение: унифицируйте разделители.
- Ячейка пустая или содержит только текст. Решение: добавьте проверку
ЕСЛИ(A1=""; 0; ЗНАЧЕН(A1)).
Как извлечь число из текста, если оно записано словами (например, «пять»)?
Excel не умеет автоматически преобразовывать текстовые числа («один», «два») в цифры. Решения:
- Ручной ввод: Создайте таблицу соответствий (например, «один» = 1) и используйте
ВПР. - VBA: Напишите функцию с массивом замен (пример кода можно найти на форумах по запросу «convert russian words to numbers excel vba»).
- Сервисы онлайн: Скопируйте текст в инструменты вроде Text-to-Numbers Converter (применимо для разовых задач).
Для русского языка задача усложняется склонениями («пять», «пяти», «пятью»), поэтому универсального решения без VBA нет.
Можно ли извлечь числа из PDF или Word в Excel?
Да, но потребуются промежуточные шаги:
- Скопируйте данные из PDF/Word в Excel (иногда помогает вставка через
Специальная вставка → Текст). - Если текст вставляется в одну ячейку, используйте
Текст по столбцам(разделитель — знак абзацаCtrl+J). - Для PDF с таблицами используйте специализированные инструменты вроде Adobe Acrobat (экспорт в Excel) или Tabula (бесплатный инструмент для извлечения таблиц).
Обратите внимание: при копировании из PDF часто теряются пробелы и перenosы, что может исказить структуру данных.
Как автоматизировать извлечение чисел для больших файлов?
Для обработки тысяч строк:
- Макросы: Запишите макрос для вашей формулы (на вкладке
Вид → Макросы → Записать макрос) и примените его ко всему столбцу. - Power Query: Создайте запрос один раз и обновляйте его по мере изменения данных.
- Python: Для очень больших файлов (100 000+ строк) используйте библиотеку pandas с регулярными выражениями. Пример кода:
import pandas as pddf = pd.read_excel("file.xlsx")
df['numbers'] = df['text'].str.extractall(r'(\d+\.?\d*)')[0].groupby(level=0).agg(list)