Возникла задача вытащить цифры из текстового столбца в Excel? Это одна из самых частых проблем при работе с неструктурированными данными — когда номера телефонов, артикулы, цены или идентификаторы «зашиты» в произвольный текст. Например, из строки "Заказ №12345 от 15.05.2026 на сумму 14990 руб." может потребоваться извлечь только номер заказа (12345), дату (15052026) или сумму (14990).
В этой статье мы разберём 7 способов решения задачи — от элементарных функций для новичков до автоматизированных методов для обработки тысяч строк. Вы узнаете, как:
- 🔢 Использовать стандартные функции
ЛЕВСИМВ,ПРАВСИМВиПСТРдля простых случаев - 📊 Применять регулярные выражения через Power Query (без VBA!)
- ⚡ Автоматизировать процесс с помощью пользовательских функций на VBA
- 🔍 Извлекать числа из текста с разделителями (запятые, тире, скобки)
Все методы протестированы в Excel 2019–2026 и Microsoft 365, а также совместимы с Google Sheets (с поправками на синтаксис). Приступим!
1. Базовые функции: ЛЕВСИМВ, ПРАВСИМВ и ПСТР
Если цифры в тексте расположены в фиксированных позициях (например, всегда первые 5 символов или после определённого разделителя), достаточно стандартных текстовых функций. Рассмотрим на примере:
Допустим, у вас есть столбец с данными вида "Товар-1234-Описание", и нужно извлечь 1234. Здесь поможет комбинация ПСТР (извлечение подстроки) с функциями поиска:
=ПСТР(A2;НАЙТИ("-";A2)+1;4)
Разберём формулу:
- 🔹
НАЙТИ("-";A2)— находит позицию первого тире (в примере это 6-й символ). - 🔹
+1— сдвигаемся на один символ вправо, чтобы начать извлечение после тире. - 🔹
4— количество символов для извлечения (длина числа).
Для извлечения цифр с начала или конца строки используйте:
- 📌
=ЛЕВСИМВ(A2;5)— первые 5 символов (если число в начале). - 📌
=ПРАВСИМВ(A2;4)— последние 4 символа (если число в конце).
⚠️ Внимание: Эти методы работают только если позиция и длина числа заранее известны. Для динамических данных (например, "Цена: 1500 руб." и "Стоимость — 250 руб.") потребуются более гибкие решения.
2. Функции ТЕКСТПОСЛЕ и ТЕКСТДО (Excel 365 и 2021)
В новых версиях Excel появились удобные функции ТЕКСТПОСЛЕ и ТЕКСТДО, которые упрощают извлечение подстрок по разделителю. Например, чтобы получить число после двоеточия в строке "Количество: 12 шт.", используйте:
=ЗНАЧЕН(ТЕКСТПОСЛЕ(A2;":";1))
Аргументы функции ТЕКСТПОСЛЕ:
- 📍
A2— ячейка с исходным текстом. - 📍
":"— разделитель (двоеточие). - 📍
1— номер вхождения (1 — первое двоеточие).
Функция ЗНАЧЕН преобразует извлечённый текст (" 12 шт.") в число (12). Для удаления лишних символов (например, "шт.") комбинируйте с ПОДСТАВИТЬ:
=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ТЕКСТПОСЛЕ(A2;":";1);" шт.";"");" ";""))
Аналогично ТЕКСТДО извлекает текст до разделителя. Например, для строки "2026_Отчёт_05" получим год:
=ТЕКСТДО(A2;"_";1)
3. Регулярные выражения через Power Query
Если вам нужно извлечь все числа из текста (независимо от позиции) или обработать большие объёмы данных, Power Query — оптимальное решение. Этот инструмент поддерживает регулярные выражения (regex), что позволяет гибко управлять извлечением.
Алгоритм действий:
- Выделите исходный диапазон и перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query выберите столбец с текстом →
Преобразовать → Извлечь → Текст по шаблону. - Введите регулярное выражение для чисел:
- 🔢
\d+— все целые числа (например,123,4567). - 🔢
\d{1,3}— числа длиной от 1 до 3 символов. - 🔢
\d+\.\d+— десятичные дроби (например,12.99).
- 🔢
ОК и загрузите данные обратно в Excel.Пример regex для извлечения чисел с разделителями
Скрытый текст:
Чтобы извлечь числа в формате 12-34-56 или 12.34.56, используйте выражение (\d+)[-\.](\d+)[-\.](\d+). В результате получите три отдельных столбца с группами чисел.
Преимущества метода:
- ✅ Обрабатывает тысячи строк за секунды.
- ✅ Поддерживает сложные шаблоны (например, извлечение чисел в скобках).
- ✅ Не требует знания VBA.
⚠️ Внимание: В Google Sheets для регулярных выражений используйте функциюREGEXEXTRACT. Пример:=REGEXEXTRACT(A2; "\d+").
4. Пользовательская функция на VBA для гибкого извлечения
Если вам нужно автоматически извлекать все числа из текста (включая дроби, отрицательные значения, числа с разделителями), напишите пользовательскую функцию на VBA:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте новый модуль (
Insert → Module) и добавьте код:
Function ExtractNumbers(rng As Range) As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Global = True
regex.Pattern = "[-+]?\d+(\.\d+)?"
ExtractNumbers = regex.Execute(rng.Value)(0)
End Function
Теперь в Excel можно использовать функцию как стандартную:
=ExtractNumbers(A2)
Функция извлечёт первое число в тексте, включая:
- 🔹 Отрицательные значения (
-15.5). - 🔹 Десятичные дроби (
3.14). - 🔹 Числа с разделителями (
1 000 000— если заменить пробелы перед обработкой).
Отключите блокировку макросов в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов → Включить все макросы|Сохраните файл как .xlsm (с поддержкой макросов)|Проверьте, что в тексте нет лишних символов (например, неразрывные пробелы)
-->
Для извлечения всех чисел из текста в отдельные ячейки модифицируйте функцию:
Function ExtractAllNumbers(rng As Range) As Variant
Dim regex As Object, matches As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Global = True
regex.Pattern = "[-+]?\d+(\.\d+)?"
Set matches = regex.Execute(rng.Value)
Dim result() As String, i As Integer
ReDim result(1 To matches.Count)
For i = 0 To matches.Count - 1
result(i + 1) = matches(i)
Next i
ExtractAllNumbers = Application.Transpose(result)
End Function
Эта функция вернёт массив чисел, который можно вставить в диапазон ячеек (выделите несколько ячеек, введите формулу и нажмите Ctrl + Shift + Enter).
5. Извлечение чисел с учётом контекста (например, цены или даты)
Часто числа в тексте сопровождаются маркерами — словами или символами, которые помогают их идентифицировать. Например:
- 💰
"Стоимость: 1999 руб."→ нужно извлечь1999. - 📅
"Дата: 15/05/2026"→ нужно извлечь15052026. - 📦
"Артикул [AB-123-XY]"→ нужно извлечь123.
В таких случаях комбинируйте функции ПОИСК, ПСТР и ЗНАЧЕН. Например, для извлечения цены:
=ЗНАЧЕН(ПОДСТАВИТЬ(ПСТР(A2;ПОИСК(":";A2)+1;ПОИСК(" руб";A2)-ПОИСК(":";A2)-1);" ";""))
Разберём по шагам:
ПОИСК(":";A2)— находит позицию двоеточия.ПОИСК(" руб";A2)— находит позицию слова " руб".ПСТРизвлекает подстроку между двоеточием и " руб".ПОДСТАВИТЬудаляет пробелы, аЗНАЧЕНпреобразует текст в число.
Для извлечения даты в формате ДД/ММ/ГГГГ и преобразования в число:
=ДАТАЗНАЧ(ПСТР(A2;ПОИСК("Дата: ";A2)+6;10))
Стандартные функции (ЛЕВСИМВ, ПСТР)|Power Query|VBA|Ручной ввод
-->
6. Обработка чисел с разделителями (пробелы, запятые, тире)
Если числа в тексте содержат разделители (например, "1 234 567" или "123-45-67"), перед извлечением их нужно привести к стандартному формату. Используйте функцию ПОДСТАВИТЬ для удаления лишних символов:
=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;" ";"");"-";"");",";"."))
Эта формула:
- 🔹 Удаляет пробелы (
" "→""). - 🔹 Удаляет тире (
"-"→""). - 🔹 Заменяет запятые на точки для корректного преобразования дробей.
Для извлечения чисел из строк вида "Код: AB-123-CD" (где 123 — нужное число) используйте комбинацию:
=ЗНАЧЕН(ПСТР(A2;ПОИСК("-";A2)+1;ПОИСК("-";A2;ПОИСК("-";A2)+1)-ПОИСК("-";A2)-1))
Если разделители нестандартные (например, "/" или "|"), замените их в формуле на нужный символ.
| Исходный текст | Формула | Результат |
|---|---|---|
"Цена 1 200,50 руб." |
=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;" ";"");",";".")) |
1200.5 |
"Артикул: XYZ-4567-AB" |
=ЗНАЧЕН(ПСТР(A2;ПОИСК("-";A2)+1;4)) |
4567 |
"Дата/Время: 15/05/2026 14:30" |
=ДАТАЗНАЧ(ЛЕВСИМВ(ПСТР(A2;ПОИСК(":";A2)+2;10);10)) |
15.05.2026 |
7. Автоматизация для больших данных: Power Query + VBA
Если вам нужно обработать десятки тысяч строк с разной структурой текста, комбинируйте Power Query и VBA:
- Используйте Power Query для предварительной очистки данных (удаление лишних символов, приведение к единому формату).
- Примените VBA для извлечения чисел по сложным правилам (например, если числа могут быть в разных частях текста).
- Автоматизируйте процесс с помощью кнопки, которая запускает макрос:
Sub ExtractNumbersToNewSheet()
Dim wsSource As Worksheet, wsResult As Worksheet
Set wsSource = ThisWorkbook.Sheets("Исходные данные")
Set wsResult = ThisWorkbook.Sheets.Add(After:=wsSource)
wsResult.Name = "Результаты"
Dim lastRow As Long, i As Long
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
wsResult.Cells(i, 1).Value = ExtractNumbers(wsSource.Cells(i, 1))
Next i
End Sub
Этот макрос:
- 🔹 Создаёт новый лист
"Результаты". - 🔹 Копирует извлечённые числа из столбца
Aисходного листа. - 🔹 Использует функцию
ExtractNumbers, которую мы написали ранее.
Для ещё большей производительности экспортируйте данные в .csv, обработайте их в Python (с помощью библиотеки pandas), а затем импортируйте обратно в Excel.
FAQ: Частые вопросы по извлечению чисел из текста
🔍 Как извлечь все числа из текста в отдельные столбцы?
Используйте Power Query с регулярным выражением (\d+) и разделите результат по столбцам. Или напишите VBA-функцию, которая возвращает массив чисел (см. раздел 4).
💡 Почему функция ЗНАЧЕН возвращает ошибку #ЗНАЧ?
Ошибка возникает, если в извлечённом тексте остались недопустимые символы (буквы, знаки валюты). Очистите текст с помощью ПОДСТАВИТЬ перед преобразованием. Например: =ЗНАЧЕН(ПОДСТАВИТЬ(A2;" руб.";"")).
⚡ Можно ли извлечь числа из текста без формул?
Да, используйте Текст по столбцам (Данные → Текст по столбцам) с разделителем. Например, если числа отделены запятыми, выберите разделитель Запятая. Для сложных случаев подойдёт Power Query.
📊 Как извлечь числа из ячеек с разным форматом?
Если формат текста непостоянный (например, "123", "Цена: 123", "[123]"), используйте VBA с регулярными выражениями или Power Query. Универсальное regex: [-+]?\d+(\.\d+)?.
🔢 Как извлечь только целые числа, игнорируя дроби?
В регулярном выражении укажите шаблон \b\d+\b (ищет целые числа, не содержащие точек). В VBA модифицируйте функцию: regex.Pattern = "\b\d+\b".