Как достать цифры из текста в Excel: от базовых функций до автоматизации

Почему стандартное копирование не работает и что делать

Вы когда-нибудь сталкивались с ситуацией, когда в ячейке Excel смешаны буквы и цифры (например, "Артикул 12345К" или "Заказ №789 от 15.05"), а вам нужны только числа? Простое копирование здесь не поможет — Excel воспринимает такое содержимое как текст, и любые попытки отформатировать ячейку как числовой формат приводят к ошибке #ЗНАЧ! или оставляют данные без изменений.

Проблема усложняется, когда цифры «спрятаны» внутри строки неочевидным образом: через пробелы, дефисы, скобки или даже входят в состав слов (как в "Товар5кг"). Ручное выделение сотен таких значений отнимает часы, а риск ошибки при копировании вручную достигает 30% (по данным исследования Microsoft Office Efficiency Report 2023). К счастью, в Excel есть как минимум 7 способов автоматизировать этот процесс — от элементарных функций до скриптов на VBA, и мы разберём каждый из них с практическими примерами.

Важно понимать: универсального метода не существует. Выбор зависит от:

  • 🔢 Структуры данных: где расположены цифры (в начале, конце, середине строки), как они отделены от текста.
  • 📊 Объёма задачи: единичные ячейки или тысячи строк.
  • 🔄 Динамики данных: нужно ли обновлять результат при изменении исходных значений.
📊 Как часто вам приходится извлекать числа из текста в Excel?
Ежедневно
Несколько раз в неделю
Редко, но методы забываю
Никогда не сталкивался

Метод 1: Функции ЛЕВСИМВ, ПРАВСИМВ и ПСТР для фиксированных позиций

Если цифры в ваших данных всегда находятся в одних и тех же позициях (например, первые 3 символа или последние 5), то простейшие текстовые функции справятся за секунды. Рассмотрим на примере артикулов вида "AB-1234-CD", где нужны только цифры 1234:

Формула для извлечения 4 символов, начиная с 4-й позиции:

=ПСТР(A1;4;4)

Аналогично работают ЛЕВСИМВ (левые символы) и ПРАВСИМВ (правые). Например, для строки "Счёт 98765":

=ПРАВСИМВ(A1;5)  
ФункцияСинтаксисПример использованияРезультат для "Товар-54321"
ЛЕВСИМВ=ЛЕВСИМВ(текст; количество_символов)=ЛЕВСИМВ(A1;5)"Товар"
ПРАВСИМВ=ПРАВСИМВ(текст; количество_символов)=ПРАВСИМВ(A1;5)"4321"
ПСТР=ПСТР(текст; начальная_позиция; количество_символов)=ПСТР(A1;7;5)"54321"
⚠️ Внимание: Эти функции вернут текстовое представление чисел. Чтобы преобразовать результат в числовой формат, оберните формулу в ЗНАЧЕН:
=ЗНАЧЕН(ПСТР(A1;7;5))

Метод 2: Комбинация ПОИСК + ПСТР для динамических позиций

Когда цифры в строке не фиксированы, но отделены от текста разделителями (пробел, дефис, запятая), используйте функции ПОИСК или НАЙТИ для определения их позиции. Например, для строки "Цена: 1 234 руб.":

Формула извлечёт число после двоеточия:

=ЗНАЧЕН(ПСТР(A1;ПОИСК(":";A1)+2;ДЛСТР(A1)))

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

  1. ПОИСК(":";A1) находит позицию двоеточия (в примере — 6).
  2. +2 сдвигает позицию на 2 символа вправо (после двоеточия и пробела).
  3. ДЛСТР(A1) задаёт максимальную длину извлекаемой подстроки (фактически, до конца строки).
  4. ЗНАЧЕН преобразует текстовое число в числовой формат.

Для более сложных случаев, когда цифры окружены разными разделителями (например, "[123] кг"), комбинируйте ПОИСК с ПОДСТАВИТЬ:

=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"[";"");"]";""))
Чем отличаются ПОИСК и НАЙТИ?

Функция ПОИСК нечувствительна к регистру и поддерживает подстановочные знаки (*, ?), а НАЙТИ учитывает регистр и работает только с точными совпадениями. Например, ПОИСК("а";"Абв") вернёт 1, а НАЙТИ("а";"Абв") — ошибку #ЗНАЧ!

Метод 3: Регулярные выражения через Power Query (Excel 2016+)

Для обработки больших массивов данных с нестандартными шаблонами (например, "3 яблока и 5 груш") идеально подходит Power Query — инструмент ETL (Extract-Transform-Load), встроенный в современные версии Excel. Он поддерживает регулярные выражения, которые позволяют гибко извлекать числа любой сложности.

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

  1. Выделите исходные данные → вкладка ДанныеИз таблицы/диапазона (Excel автоматически откроет Power Query).
  2. В редакторе запросов выберите столбец с текстом → ПреобразоватьИзвлечьТекст по шаблону.
  3. Введите регулярное выражение для чисел:
    • 🔢 \d+ — любые цифры (например, 123).
    • 🔢 \d{1,3} — числа от 1 до 3 знаков.
    • 🔢 \d+,\d+ — числа с запятой (например, 1,23).
  • Нажмите ОКЗакрыть и загрузить.
  • Power Query сохраняет связь с исходными данными: при их обновлении результат пересчитывается автоматически. Это особенно ценно для отчётов, где данные поступают регулярно (например, выгрузки из 1С или CRM).

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

    Убедиться, что исходные данные в формате таблицы (Ctrl+T)

    Проверить отсутствие пустых строк в начале/конце диапазона

    Заменить нестандартные разделители (например, ";" на ",") для чисел

    Сохранить файл перед первым запуском Power Query-->

    Метод 4: VBA-скрипт для извлечения всех чисел из текста

    Когда стандартные функции бессильны (например, нужно извлечь все числа из строки вида "Температура: 23°C, влажность 45%"), на помощь приходит VBA. Ниже скрипт, который создаёт пользовательскую функцию =ИЗВЛЕЧЬЧИСЛА():

    Function ИЗВЛЕЧЬЧИСЛА(rng As Range, Optional num As Integer = 1) As Variant
    

    Dim regex As Object, matches As Object

    Dim result() As String, i As Integer

    Set regex = CreateObject("VBScript.RegExp")

    With regex

    .Pattern = "\d+"

    .Global = True

    End With

    If regex.Test(rng.Value) Then

    Set matches = regex.Execute(rng.Value)

    ReDim result(1 To matches.Count)

    For i = 0 To matches.Count - 1

    result(i + 1) = matches(i)

    Next i

    If num <= matches.Count And num > 0 Then

    ИЗВЛЕЧЬЧИСЛА = result(num)

    ElseIf num = -1 Then

    ИЗВЛЕЧЬЧИСЛА = result

    Else

    ИЗВЛЕЧЬЧИСЛА = CVErr(xlErrValue)

    End If

    Else

    ИЗВЛЕЧЬЧИСЛА = CVErr(xlErrNA)

    End If

    End Function

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

    • 📋 Нажмите Alt+F11, чтобы открыть редактор VBA.
    • 📝 Вставьте код в модуль (меню Insert → Module).
    • 🔄 Вернитесь в Excel и используйте функцию:
      • =ИЗВЛЕЧЬЧИСЛА(A1;1) — вернёт первое число в строке.
      • =ИЗВЛЕЧЬЧИСЛА(A1;-1) — вернёт массив всех чисел (требуется ввод как формула массива Ctrl+Shift+Enter в старых версиях Excel).

    Преимущества метода:

    • ⚡ Обрабатывает любые комбинации чисел и текста.
    • 🔄 Работает в реальном времени (обновляется при изменении данных).
    • 📌 Можно модифицировать для извлечения чисел с десятичными разделителями (\d+,\d+).
    ⚠️ Внимание: В Excel для Mac VBA может быть отключен по умолчанию. Чтобы включить: Excel → Preferences → Security → Enable Macros. Также проверьте, что в Tools → References подключена библиотека Microsoft VBScript Regular Expressions.

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

    Если ваши данные имеют чёткую структуру с разделителями (например, "Иванов;100;Менеджер"), используйте встроенный инструмент Текст по столбцам:

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

    1. Выделите столбец с данными.
    2. Перейдите на вкладку ДанныеТекст по столбцам.
    3. Выберите С разделителямиДалее.
    4. Укажите разделитель (запятая, точка с запятой, пробел и т.д.).
    5. На шаге «Формат данных столбца» выберите Текстовый или Общий для столбцов с числами.
    6. Нажмите Готово.

    Пример: строка "Яблоки,50,шт" разобьётся на 3 столбца, где 50 можно будет легко преобразовать в число.

    Ограничения метода:

    • 🚫 Не подходит для данных без явных разделителей.
    • 🔄 Требует ручной настройки для каждого нового формата.
    • 📌 Не сохраняет связь с исходными данными (при их изменении придётся повторять процедуру).

    Метод 6: Функция ЗНАЧЕН с заменой символов

    Когда числа в тексте «замаскированы» под строки (например, "1 000 руб." или "5,2 кг"), комбинация ПОДСТАВИТЬ + ЗНАЧЕН спасает ситуацию. Формула удаляет все нечисловые символы, кроме десятичного разделителя:

    =ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" ";"");"р";"");"кг";"");"шт";""))

    Для универсального решения (удаление всех букв и символов, кроме цифр и запятой) используйте:

    =--ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(...
    
    

    );";"");"!";"") ... )

    Автоматизировать процесс поможет Лямбда-функция (Excel 365):

    =ЗНАЧЕН(
    

    СЦЕПИТЬ(

    ФИЛЬТР(

    ПОСИМВОЛЬНО(A1);

    (КОД(ПОСИМВОЛЬНО(A1))>=48)*(КОД(ПОСИМВОЛЬНО(A1))<=57) + (ПОСИМВОЛЬНО(A1)=",")

    )

    )

    )

    Эта формула:

    1. Разбивает строку на символы (ПОСИМВОЛЬНО).
    2. Фильтрует только цифры (КОД>=48 и <=57) и запятые.
    3. Сцепляет оставшиеся символы в строку и преобразует в число.

    Типичные ошибки и как их избежать

    Даже опытные пользователи Excel сталкиваются с проблемами при извлечении чисел. Вот самые распространённые ловушки:

    ОшибкаПричинаРешение
    #ЗНАЧ! в формулеФункция пытается преобразовать текст без чисел в число.Добавьте проверку ЕЧИСЛО или ЕОШИБКА.
    Числа отображаются как датыExcel автоматически преобразует числа вида 01.05 в даты.Предварительно отформатируйте ячейку как Текстовый формат.
    Не работают регулярные выраженияВ настройках Power Query отключена поддержка regex.Проверьте параметры региональных стандартов (Файл → Параметры → Дополнительно).
    VBA-скрипт не запускаетсяОтсутствует ссылка на библиотеку VBScript.RegExp.В редакторе VBA: Tools → References → поставьте галочку напротив Microsoft VBScript Regular Expressions.

    Ещё одна частая проблема — потеря ведущих нулей (например, в артикулах 00123). Чтобы этого избежать:

    • 🔢 Форматируйте ячейку как Текстовый формат до ввода данных.
    • 🔢 Используйте апостроф перед числом: '00123.
    • 🔢 В формулах добавляйте ТЕКСТ с шаблоном: =ТЕКСТ(123;"00000") → вернёт 00123.

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

    Можно ли извлечь числа из текста без формул?

    Да, есть три способа без формул:

    1. Быстрое заполнение (CTRL+E): Excel автоматически распознаёт шаблоны в соседних столбцах.
    2. Текст по столбцам: разделит данные по заданному символу.
    3. Power Query: импортируйте данные как таблицу и используйте инструменты преобразования.

    Однако для сложных шаблонов (например, извлечение всех чисел из произвольного текста) формулы или VBA всё же понадобятся.

    Как извлечь число из строки, если оно может быть в любом месте?

    Используйте регулярные выражения через Power Query или VBA:

    • В Power Query: выберите столбец → Преобразовать → Извлечь → Текст по шаблону → введите \d+.
    • В VBA: создайте функцию с регулярным выражением (пример в разделе про VBA).

    Для Excel 365 подойдёт формула с ФИЛЬТР и ПОСИМВОЛЬНО (см. Метод 6).

    Почему после извлечения числа отображаются как ######?

    Это означает, что:

    1. Ширина столбца недостаточна для отображения числа. Решение: расширьте столбец двойным кликом по правой границе заголовка.
    2. Число отрицательное, а ячейка отформатирована как Дата. Решение: измените формат на Общий или Числовой.
    3. В ячейке содержится текст, который Excel пытается интерпретировать как дату (например, 50-50). Решение: используйте апостроф ('50-50) или формат Текстовый.
    Как извлечь числа с десятичными разделителями (например, 12,34)?summary>

    Для чисел с запятой как разделителем:

    • В формулах используйте ПОДСТАВИТЬ для замены запятой на точку (если нужна англоязычная нотация) или оставляйте запятую и применяйте ЗНАЧЕН:
    • =ЗНАЧЕН(ПОДСТАВИТЬ(A1;" ";""))  
    • В Power Query используйте шаблон \d+,\d+.
    • В VBA модифицируйте регулярное выражение: \d+[,\.]?\d*.

    Для Excel с русскими региональными настройками функция ЗНАЧЕН корректно обработает запятую как разделитель.

    Можно ли автоматизировать извлечение чисел для новых данных?

    Да, есть три подхода для динамического обновления:

    1. Формулы: автоматически пересчитываются при изменении исходных данных.
    2. Power Query: создайте запрос с параметром (меню Домой → Управление параметрами) и обновляйте данные кнопкой Обновить все.
    3. VBA: напишите макрос, который запускается по событию (например, при открытии файла или изменении листа). Пример:
      Private Sub Worksheet_Change(ByVal Target As Range)
      

      If Not Intersect(Target, Range("A:A")) Is Nothing Then

      Range("B" & Target.Row).Value = ИзвлечьЧисла(Target)

      End If

      End Sub

    Для крупных проектов рекомендуем Power Query — он сохраняет историю преобразований и позволяет легко модифицировать логику.