Работа с неструктурированными данными в Microsoft Excel часто требует извлечения числовых значений из текстовых строк. Представьте: у вас таблица с адресами «ул. Ленина, д. 15, кв. 42», номерами телефонов «+7(912)345-67-89» или артикулами «Товар ABC-123-XYZ». Ваша задача — выделить только цифры 15, 42, 9123456789 или 123. Вручную это займёт часы, а с правильными инструментами — минуты.
В этой статье мы разберём 5 проверенных методов — от элементарных функций для новичков до автоматизированных решений для опытных пользователей. Вы узнаете, как обработать данные с помощью стандартных формул, надстроек Power Query, макросов на VBA и даже регулярных выражений. Каждый способ проиллюстрирован примерами и адаптирован под разные версии Excel (2010–2023, Office 365).
⚠️ Важно: если ваши данные содержат числа с десятичными разделителями (например, «3,14 м»), стандартные методы извлечения могут разбить их на отдельные цифры. Для таких случаев в статье есть специальный раздел с решениями.
1. Базовый метод: функции ЛЕВСИМВ, ПРАВСИМВ и ПСТР
Для простейших задач, когда цифры расположены в начале, конце или на фиксированной позиции строки, подойдут текстовые функции. Рассмотрим их на примере извлечения номера дома из адреса «ул. Гагарина, д. 78, корп. 2».
Функция ЛЕВСИМВ вернёт заданное количество символов с начала строки. Если номер дома всегда состоит из 2 цифр:
=ЛЕВСИМВ(B2; НАЙТИ(" "; B2; НАЙТИ("д. "; B2)+3) - (НАЙТИ("д. "; B2)+3))
Но этот подход хрупкий: он сломается, если формат адреса изменится. Более универсально использовать комбинацию ПСТР + НАЙТИ:
=ПСТР(B2; НАЙТИ("д. "; B2)+3; ДЛСТР(B2)-НАЙТИ("д. "; B2)-НАЙТИ(" "; B2; НАЙТИ("д. "; B2)+3)+4)
⚠️ Внимание: эти формулы работают только если структура текста строго фиксирована. Для адресов типа «д.78» (без пробела после «д.») потребуется корректировка:
=ПСТР(B2; НАЙТИ("д."; B2)+2; 2)
Для извлечения цифр из конца строки (например, индекса «123456» в «Москва, 123456») используйте ПРАВСИМВ:
=ПРАВСИМВ(B2; 6)
2. Универсальная формула: извлечение всех цифр из текста
Когда цифры разбросаны по строке (например, «Заказ №A-45-B-789»), нужен метод, который соберёт их в одно число. Для этого используем массивную формулу с функциями ТЕКСТПОСЛЕСИМВ, ПОВТОР и ЗАМЕНИТЬ:
=--ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2;"0";"");"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"");"8";"");"9";"")
Как это работает:
- Функция
ПОДСТАВИТЬпоследовательно удаляет все символы, кроме цифр. ТЕКСТПОСЛЕСИМВпреобразует результат в число (двойной минус--убирает ошибку #ЗНАЧ!).
Эта формула извлекает ВСЕ цифры подряд, включая ведущие нули (например, из «Товар 00123» получится 123). Чтобы сохранить нули, используйте формат ячейки «Текстовый».
Для Excel 365 и Excel 2021 есть более элегантное решение с функцией ТЕКСТРАЗД:
=ТЕКСТРАЗД(ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(B2; {"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"}; ""); ","); ";"; 1; 1)
3. Power Query: автоматизированное извлечение цифр
Если данных много (тысячи строк), Power Query справится быстрее формул. Этот инструмент доступен в Excel 2016+ и Office 365 через вкладку Данные → Получить данные → Из таблицы/диапазона.
Пошаговая инструкция:
- Выделите исходные данные и загрузите их в Power Query.
- В редакторе выберите столбец с текстом →
Преобразовать → Заменить значения. - В поле «Найти» введите регулярное выражение
[^0-9], в «Заменить на» оставьте пусто. Это удалит всё, кроме цифр. - Нажмите
Закрыть и загрузить.
Выделить исходный диапазон
Загрузить в Power Query через "Из таблицы/диапазона"
Применить замену по regex [^0-9]
Указать тип данных "Целое число" или "Текст"
Загрузить результат в новую таблицу-->
⚠️ Внимание: если после извлечения цифр в результатах появляются ошибки #ЗНАЧ!, проверьте:
- 🔹 Формат ячеек результата (должен быть «Общий» или «Текстовый»).
- 🔹 Наличие неразрывных пробелов (замените их стандартными через
=ПОДСТАВИТЬ(B2; СИМВОЛ(160); " ")).
Power Query также позволяет сохранять ведущие нули, если на этапе загрузки выбрать тип данных «Текст».
4. Макросы VBA: извлечение цифр для продвинутых пользователей
Для повторяющихся задач напишите пользовательскую функцию VBA, которая будет доступна как стандартная формула. Откройте редактор VBA (Alt + F11) и вставьте этот код в модуль:
Function ExtractNumbers(rng As Range) As String
Dim strInput As String
Dim strOutput As String
Dim i As Integer
strInput = rng.Value
strOutput = ""
For i = 1 To Len(strInput)
If IsNumeric(Mid(strInput, i, 1)) Then
strOutput = strOutput & Mid(strInput, i, 1)
End If
Next i
ExtractNumbers = strOutput
End Function
Теперь в Excel используйте формулу:
=ExtractNumbers(B2)
Преимущества метода:
- 🔹 Работает со всеми версиями Excel (включая 2003).
- 🔹 Обрабатывает до 10 000 строк за секунду (против 1–2 секунд у формул).
- 🔹 Сохраняет ведущие нули.
⚠️ Внимание: перед использованием макросов проверьте настройки безопасности (Файл → Параметры → Центр управления безопасностью → Параметры центра → Настройки макросов). Для работы кода выберите «Включить все макросы» (только для доверенных файлов!).
5. Регулярные выражения: точный контроль над извлечением
Для сложных шаблонов (например, извлечение цифр между определёнными символами) используйте регулярные выражения (regex). В Excel их поддерживает Power Query и VBA.
Пример 1: извлечь цифры из строки «ID: 12345-ABC-678» (только первую группу):
=Регулярка.Извлечь(B2; "(\d+)")
Где \d+ — шаблон для одной или более цифр.
Пример 2: извлечь все цифры, включая десятичные дроби (например, «3.14 м» → 3.14):
=Регулярка.Извлечь(B2; "(\d+\.?\d*)")
Для реализации regex в Excel без Power Query потребуется VBA-функция с подключением библиотеки Microsoft VBScript Regular Expressions:
Function ExtractWithRegex(rng As Range, pattern As String) As String
Dim regex As Object
Dim matches As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Global = True
regex.Pattern = pattern
If regex.Test(rng.Value) Then
Set matches = regex.Execute(rng.Value)
ExtractWithRegex = matches(0).Value
Else
ExtractWithRegex = ""
End If
End Function
Вызов функции:
=ExtractWithRegex(B2; "\d+")
| Метод | Сложность | Скорость | Сохраняет ведущие нули | Подходит для |
|---|---|---|---|---|
| Стандартные функции | ⭐ | ⏳ Медленно | ❌ Нет | Простые задачи, 100–1000 строк |
| Power Query | ⭐⭐ | ⚡ Быстро | ✅ Да | Большие наборы данных, регулярная обработка |
| VBA (простой) | ⭐⭐ | ⚡⚡ Очень быстро | ✅ Да | Повторяющиеся задачи, любые версии Excel |
| VBA (regex) | ⭐⭐⭐ | ⚡⚡ | ✅ Да | Сложные шаблоны, опытные пользователи |
6. Обработка специальных случаев
Не все цифры в тексте нужно извлекать одинаково. Рассмотрим типичные исключения:
1. Десятичные дроби:
Если в строке «Вес: 3.5 кг» нужно сохранить точку как разделитель, используйте:
=--ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2; "."; "#"); ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(B2; {"0";"1";"2";"3";"4";"5";"6";"7";"8";"9";"."}; ""); "#"); "")
2. Отрицательные числа:
Для строк типа «Температура: -15°C» модифицируйте regex-шаблон:
=ExtractWithRegex(B2; "-?\d+")
3. Римские цифры:
Чтобы исключить римские цифры (например, «XXI век»), добавьте проверку:
=ЕСЛИ(ИЛИ(B2="I"; B2="V"; B2="X"; B2="L"; B2="C"; B2="D"; B2="M"); ""; ExtractNumbers(B2))
Как извлечь цифры из PDF или сканированного документа?
Для этого сначала преобразуйте PDF в Excel с помощью инструментов OCR (например, Adobe Acrobat Pro или бесплатный OnlineOCR.net). Затем примените любой метод из этой статьи. Обратите внимание: OCR может распознавать цифры как символы (например, «О» вместо «0»), поэтому после конвертации проверьте данные на ошибки.
⚠️ Внимание: если после извлечения цифр результаты отображаются как даты (например, «1-2» превращается в «02-янв»), измените формат ячейки на «Текстовый» до ввода формулы.
Сравнение методов: какой выбрать?
Выбор метода зависит от объёма данных, структуры текста и вашего уровня владения Excel:
- 🔹 1–100 строк, простой текст: стандартные функции (
ПСТР,ЛЕВСИМВ). - 🔹 100–10 000 строк, повторяющаяся задача: Power Query или простой VBA-макрос.
- 🔹 Сложные шаблоны (телефоны, артикулы): VBA с регулярными выражениями.
- 🔹 Единоразовая задача, Excel 365: функция
ТЕКСТРАЗД.
FAQ: Частые вопросы по извлечению цифр
Как извлечь цифры из ячейки, если они разделены буквами (например, «A1B2C3» → 123)?
Используйте массивную формулу:
=--ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2;"0";"");"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"");"8";"");"9";"")
Или VBA-функцию ExtractNumbers из раздела 4.
Почему после извлечения цифр получается ошибка #ЗНАЧ!?
Причины и решения:
- 🔹 В исходной ячейке нет цифр → проверьте данные.
- 🔹 Формула массива не подтверждена
Ctrl+Shift+Enter(для Excel 2019 и старше не актуально). - 🔹 Ячейка результата отформатирована как «Дата» → измените формат на «Общий».
Можно ли извлечь цифры из защищённого листа?
Да, но с ограничениями:
- 🔹 Формулы будут работать, если ячейки не заблокированы для чтения.
- 🔹 VBA-макросы потребуют временного снятия защиты (пароль нужно знать).
- 🔹 Power Query обходит защиту листа, так как работает с копией данных.
Как извлечь цифры из ячеек с ошибками (#Н/Д, #ДЕЛ/0!)?
Оберните формулу в ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(ExtractNumbers(B2); "")
Или используйте Power Query, где ошибки автоматически фильтруются на этапе загрузки.
Есть ли разница между извлечением цифр в Excel и Google Sheets?
Да, в Google Sheets:
- 🔹 Нет Power Query, но есть аналогичная надстройка Apps Script.
- 🔹 Функция
REGEXEXTRACTзаменяет VBA-решения:=REGEXEXTRACT(B2; "\d+") - 🔹 Массивные формулы вводятся без
Ctrl+Shift+Enter.