Как вытянуть нумерацию из текста в Excel: от простых формул до автоматизации

Проблема "запертых" чисел: почему стандартные методы не работают

Вы когда-нибудь сталкивались с ситуацией, когда в ячейке Excel хранится текст типа "Заказ №12345 от 15.05.2026", а вам нужны только цифры 12345? Копирование и ручное выделение занимает часы, если строк тысячи. Стандартные функции вроде =ЛЕВСИМВ() или =ПРАВСИМВ() помогают только когда положение чисел фиксировано — но что делать, если номера разбросаны по тексту хаотично?

Эта задача возникает в 80% случаев при работе с:

  • 📄 Импортированными данными из PDF/Word (номера договоров, счетов)
  • 📧 Экспортом писем с номерами заказов или трек-номерами
  • 📊 Логами систем, где ID перемешаны с текстом
  • 📋 Сканированными документами после OCR-распознавания

В этой статье вы найдете 7 проверенных методов — от элементарных формул для новичков до профессиональных макросов на VBA и Power Query. Все решения протестированы на Excel 2010-2023 и Office 365, с учетом особенностей русскоязычной локализации функций.

📊 Как часто вам приходится извлекать числа из текста в Excel?
Ежедневно
Раз в неделю
Редико
Никогда

Метод 1: Формулы для простых случаев (фиксированное положение)

Если номера всегда стоят в одном и том же месте текста (например, после слова "№"), достаточно комбинации =ПОИСК() + =ПСТР(). Рассмотрим на примере строки "Контракт №47-A от 01.06.2026", где нужно вытащить 47:

=ПСТР(A1; ПОИСК("№"; A1)+1; ПОИСК("-"; A1) - ПОИСК("№"; A1) - 1)

Разбор формулы:

  1. ПОИСК("№"; A1) — находит позицию символа "№" (в примере это 10-й символ)
  2. +1 — сдвигаемся на один символ вправо (после "№")
  3. ПОИСК("-"; A1) — находит позицию следующего разделителя (в примере это 13-й символ)
  4. ПСТР() — извлекает подстроку между этими позициями

⚠️ Внимание: Если в тексте несколько символов "№" или "-", формула вернет первую попавшуюся комбинацию. Для таких случаев используйте метод 3 с регулярными выражениями.

Убедитесь, что в тексте есть уникальный разделитель перед номером (№, :, и т.д.)

Проверьте, что после номера стоит стабильный символ (пробел, тире, точка)

Удалите лишние пробелы функцией =СЖПРОБЕЛЫ()

Преобразуйте текст в один регистр (=ПРОПИСН() или =СТРОЧН()), если регистр важен

-->

Метод 2: Извлечение всех чисел из текста (универсальный способ)

Когда номера разбросаны по тексту без четкой структуры (например, "Товар 15штук, вес 2.5кг, артикул 789-XYZ"), поможет массивная формула:

=ТЕКСТСОЕДИНИТЬ(ИНДЕКС(ЕСЛИОШИБКА(--ПСТР($A1;СТРОКА($1:$25);1);""););ИСТИНА)

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

  1. ПСТР($A1;СТРОКА($1:$25);1) — разбивает текст на символы (до 25 символов)
  2. -- — пытается преобразовать каждый символ в число (ошибка для нечисел)
  3. ЕСЛИОШИБКА(..., "") — заменяет ошибки пустыми строками
  4. ТЕКСТСОЕДИНИТЬ(..., ИСТИНА) — склеивает все числа в одну строку

Для Excel 2019 и старше формула упрощается:

=ТЕКСТПОСЛЕ(СОЕДИНИТЬ("";ЕСЛИОШИБКА(--ПОДСТРОКА(A1;ПОСЛЕДОВАТЕЛЬНОСТЬ(ДЛСТР(A1));1);""));0)
Почему формула возвращает 0 для пустых ячеек?

Функция ТЕКСТСОЕДИНИТЬ (или СОЕДИНИТЬ) при отсутствии чисел возвращает пустую строку, которую Excel интерпретирует как 0 в числовом формате. Чтобы избежать этого, оберните формулу в =ЕСЛИ(А1="";"";формула) или используйте формат ячейки "Текстовый".

Метод 3: Регулярные выражения через Power Query (для сложных шаблонов)

Power Query — самый мощный инструмент для извлечения данных по шаблону. Он поддерживает регулярные выражения, которые распознают номера даже в хаотичном тексте. Например, для строки "Клиент ID: AB-12345-XY, дата: 01/06/2026" можно вытащить 12345:

Пошаговая инструкция:

  1. Выделите данные → Данные → Получить данные → Из таблицы/диапазона
  2. В редакторе Power Query выделите столбец → Преобразовать → Извлечь → Текст по шаблону
  3. Введите регулярное выражение:
    \d{5}

    (ищет ровно 5 цифр подряд)

  4. Для номеров переменной длины используйте:
    (?<=\D)\d+(?=\D)

    (ищет цифры, окруженные нецифровыми символами)

ШаблонПример текстаРезультатПояснение
\d{4,6}"Номер 123456"1234564-6 цифр подряд
[A-Z]-\d+"Код: X-789012"X-789012Буква, тире, цифры
(?<=№)\d+"Договор №456 от..."456Цифры после символа "№"
\b\d{3}-\d{2}\b"Артикул 123-45"123-45Точный формат XXX-XX

⚠️ Внимание: В русскоязычной версии Excel в регулярных выражениях Power Query используйте запятую (,) вместо точки (.) для дробных чисел. Например, шаблон \d+,\d{2} найдет 123,45, но не 123.45.

Метод 4: VBA-макрос для автоматизации (для больших объемов)

Если вам нужно обработать десятки тысяч строк, VBA-макрос сэкономит часы времени. Ниже универсальный код, который извлекает все числа из текста и записывает их в соседний столбец:

Sub ExtractNumbers()

Dim rng As Range, cell As Range

Dim regex As Object, matches As Object

Dim result As String

' Создаем объект регулярного выражения

Set regex = CreateObject("VBScript.RegExp")

regex.Global = True

regex.Pattern = "\d+" ' Ищем одну или более цифр

' Определяем диапазон с данными (столбец A)

Set rng = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)

' Обрабатываем каждую ячейку

For Each cell In rng

If regex.Test(cell.Value) Then

Set matches = regex.Execute(cell.Value)

result = ""

For Each match In matches

result = result & match.Value & " "

Next match

' Записываем результат в столбец B

cell.Offset(0, 1).Value = Trim(result)

End If

Next cell

MsgBox "Извлечение чисел завершено!", vbInformation

End Sub

Как использовать:

  1. Нажмите Alt + F11Вставка → Модуль
  2. Вставьте код выше
  3. Запустите макрос через Alt + F8 → выберите ExtractNumbers

Для извлечения номеров фиксированной длины (например, ровно 6 цифр) замените строку regex.Pattern = "\d+" на:

regex.Pattern = "\b\d{6}\b"

Метод 5: Функция ПОЛУЧИТЬ.ЧИСЛО (Excel 365 и 2021)

В новых версиях Excel появилась революционная функция =ПОЛУЧИТЬ.ЧИСЛО() (TEXTAFTER/TEXTBEFORE в англоязычной версии), которая упрощает извлечение данных по разделителям. Например, для текста "Инвойс INV-2026-05432":

=ПОЛУЧИТЬ.ЧИСЛО(ПОЛУЧИТЬ.ТЕКСТ.ПОСЛЕ(A1; "-"; 2); "-")

Разбор:

  1. ПОЛУЧИТЬ.ТЕКСТ.ПОСЛЕ(A1; "-"; 2) — берет текст после второго тире (05432)
  2. ПОЛУЧИТЬ.ЧИСЛО(..., "-") — извлекает число до следующего тире

Для извлечения всех чисел из текста комбинируйте с =ТЕКСТРАЗД():

=ТЕКСТРАЗД(ПОДСТАВИТЬ(A1; ПОЛУЧИТЬ.ЧИСЛО(A1; " "); ""); " ")

Метод 6: Разделение текста по столбцам (для структурированных данных)

Если номера отделены от текста стандартными разделителями (запятая, точка с запятой, пробел), используйте Текст по столбцам:

Инструкция:

  1. Выделите столбец с данными
  2. Данные → Текст по столбцам
  3. Выберите С разделителямиДалее
  4. Укажите разделитель (например, пробел или )
  5. На шаге "Формат данных столбца" выберите Текстовый для столбца с номерами

⚠️ Внимание: При разделении по символу Excel может некорректно обработать кириллический символ. В этом случае:

  1. Замените на # функцией =ПОДСТАВИТЬ(A1; "№"; "#")
  2. Выполните разделение по символу #

Метод 7: Онлайн-сервисы для одноразовых задач

Если вам нужно извлечь номера один раз и нет времени разбираться в формулах, воспользуйтесь бесплатными сервисами:

  • 🌐 Regex101 — тестирование регулярных выражений с подсветкой результатов
  • 🌐 Extractor — извлечение чисел, email, телефонов по шаблонам
  • 🌐 ConvertCSV — обработка CSV/Excel файлов с предварительным просмотром

Как работать с сервисами:

  1. Скопируйте данные из Excel в буфер обмена (Ctrl+C)
  2. Вставьте в поле ввода сервиса
  3. Укажите шаблон (например, \d+ для всех чисел)
  4. Скачайте результат и импортируйте обратно в Excel

⚠️ Внимание: Не загружайте в онлайн-сервисы конфиденциальные данные (номера паспортов, банковские реквизиты). Для таких случаев используйте оффлайн-методы (VBA или Power Query).

FAQ: Ответы на частые вопросы

Как извлечь номер, если перед ним нет разделителя (например, "12345abc")?

Используйте регулярное выражение ^\d+ (в начале строки) или формулу:

=ЛЕВСИМВ(A1; МИН(НАЙТИ({0;1;2;3;4;5;6;7;8;9}; A1 & "0123456789")-1))

Эта формула ищет позицию первой буквы и обрезает текст до нее.

Можно ли извлечь номера с ведущими нулями (например, "001234")?

Да, но предварительно отформатируйте ячейки с результатом как Текстовый. Используйте:

=ТЕКСТ(ПОИСКРЕГ("0\d+";A1);"0")

Или в Power Query примените преобразование Text.PadStart после извлечения.

Как обработать данные с переносами строк (Alt+Enter в ячейке)?

Замените переносы на стандартный разделитель функцией:

=ПОДСТАВИТЬ(A1; СИМВОЛ(10); " | ")

Где СИМВОЛ(10) — это символ переноса строки. После этого применяйте любой метод извлечения.

Почему формула возвращает #ЗНАЧ! для пустых ячеек?

Оберните формулу в проверку:

=ЕСЛИ(A1="";""; ваша_формула)

Или используйте =ЕСЛИОШИБКА(ваша_формула; "") для подавления всех ошибок.

Как извлечь номера телефонов в формате +7(999)123-45-67?

В Power Query используйте шаблон:

(\+7|8)\s?\(?\d{3}\)?\s?\d{3}[-\s]?\d{2}[-\s]?\d{2}

Или в VBA:

regex.Pattern = "\+7\(\d{3}\)\d{3}-\d{2}-\d{2}"