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

Возникла задача вытащить цифры из текстового столбца в 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), что позволяет гибко управлять извлечением.

Алгоритм действий:

  1. Выделите исходный диапазон и перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В открывшемся редакторе Power Query выберите столбец с текстом → Преобразовать → Извлечь → Текст по шаблону.
  3. Введите регулярное выражение для чисел:
    • 🔢 \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:

    1. Нажмите Alt + F11, чтобы открыть редактор VBA.
    2. Вставьте новый модуль (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);" ";""))

    Разберём по шагам:

    1. ПОИСК(":";A2) — находит позицию двоеточия.
    2. ПОИСК(" руб";A2) — находит позицию слова " руб".
    3. ПСТР извлекает подстроку между двоеточием и " руб".
    4. ПОДСТАВИТЬ удаляет пробелы, а ЗНАЧЕН преобразует текст в число.

    Для извлечения даты в формате ДД/ММ/ГГГГ и преобразования в число:

    =ДАТАЗНАЧ(ПСТР(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:

    1. Используйте Power Query для предварительной очистки данных (удаление лишних символов, приведение к единому формату).
    2. Примените VBA для извлечения чисел по сложным правилам (например, если числа могут быть в разных частях текста).
    3. Автоматизируйте процесс с помощью кнопки, которая запускает макрос:
    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".