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

Проблема смешанных данных: когда цифры прячутся в тексте

Вы когда-нибудь сталкивались с ситуацией, когда в ячейках Excel хранятся данные вида "Заказ #12345 от 15.05", "Артикул: AB789CD" или "Температура: +23°C"? В таких случаях извлечение чисел вручную превращается в мучение — особенно если строк тысячи. К счастью, Excel предлагает несколько способов автоматически выделить только цифры из текста, сохраняя их в отдельных ячейках или заменяя исходные данные.

Эта задача актуальна для бухгалтеров (выделение номеров счетов из писем), логистов (парсинг трек-номеров), аналитиков (очистка импортированных данных) и даже маркетологов (извлечение цен из прайс-листов в формате PDF→Excel). В статье разберём 5 рабочих методов — от элементарных функций до продвинутых скриптов, — которые покрывают 90% реальных кейсов. Важно: все решения тестировались на Excel 2019 и Office 365, но большинство работают и в версиях с 2010 года.

Прежде чем переходить к инструкциям, ответьте на вопрос: какой тип данных вам нужно обработать?

📊 Какой формат данных вам нужно очистить?
Текст с цифрами (например, "Товар 45 шт")
Смешанные символы (например, "AB123CD45")
Дробные числа в тексте (например, "3.14 метров")
Другое

Метод 1: Функции ПСТР и ПОИСК для простых шаблонов

Если цифры в ваших данных расположены по фиксированному шаблону (например, всегда после определённого символа или в одном и том же положении), достаточно комбинации функций ПСТР (извлечение подстроки) и ПОИСК (определение позиции символа). Этот способ не требует знания VBA и работает даже в защищённых файлах.

Допустим, у вас есть ячейки с текстом вида "Код клиента: 100500", и нужно извлечь только 100500. Формула будет такой:

=ПСТР(A1; ПОИСК(":"; A1)+2; 10)

Здесь:

  • 🔍 ПОИСК(":"; A1) — находит позицию двоеточия в ячейке A1.
  • 📏 +2 — сдвиг на 2 символа вправо (пробел после двоеточия + первая цифра).
  • ✂️ 10 — количество извлекаемых символов (увеличьте, если числа длиннее).

Для более универсального решения (если длина числа неизвестна) используйте комбинацию с ДЛСТР:

=ПСТР(A1; ПОИСК(":"; A1)+2; ДЛСТР(A1)-ПОИСК(":"; A1)-1)
Что делать, если разделитель не стабильный?

Если вместо двоеточия может быть тире, пробел или другой символ, используйте функцию НАЙТИ с проверкой на ошибку:

=ЕСЛИОШИБКА(ПОИСК(":"; A1); ЕСЛИОШИБКА(ПОИСК("-"; A1); ПОИСК(" "; A1)))

Это найдёт первый из возможных разделителей.

⚠️ Внимание: Метод работает только если цифры расположены в одном и том же месте относительно разделителя. Для данных вида "12 абрикосов и 5 яблок" потребуются другие подходы.

Метод 2: Регулярные выражения через Power Query

Если вы работаете с Excel 2016 или новее (включая Office 365), у вас есть доступ к Power Query — инструменту для преобразования данных, который поддерживает регулярные выражения. Это идеальный вариант для извлечения чисел из неструктурированного текста, где цифры могут находиться в любом месте.

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

  1. Выделите исходный диапазон данных.
  2. Перейдите на вкладку ДанныеИз таблицы/диапазона (если данных много, сначала преобразуйте в таблицу Ctrl+T).
  3. В открывшемся редакторе Power Query выберите столбец с данными → ПреобразоватьИзвлечьТекст по шаблону.
  4. Введите регулярное выражение:
    • 🔢 Для целых чисел: \d+
    • 📊 Для дробных чисел: \d+[.,]?\d*
  • Нажмите ОК и загрузите данные обратно в Excel.
  • Пример работы регулярного выражения \d+:

    Исходные данныеРезультат
    "Заказ №45 от 10.05"45
    10
    05
    "Температура: +23.5°C"23
    5
    "Артикул AB123CD456"123
    456
    ⚠️ Внимание: Power Query создаёт новый лист с результатами, не изменяя исходные данные. Если вам нужно обновить данные после изменений в исходнике, щёлкните правой кнопкой по таблице → Обновить.

    Метод 3: Пользовательская функция на VBA для сложных случаев

    Когда стандартные функции и Power Query не справляются (например, нужно извлечь числа из многострочного текста или с учётом специфических разделителей), на помощь приходит VBA. Ниже приведён код функции, которая возвращает все цифры из текста в виде одного числа (например, из "A1B2C3" получится 123):

    Как добавить функцию:

    1. Нажмите Alt+F11, чтобы открыть редактор VBA.
    2. В меню выберите InsertModule.
    3. Вставьте следующий код:
      Function ExtractNumbers(rng As Range) As Double
      

      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

      If strOutput <> "" Then

      ExtractNumbers = Val(strOutput)

      Else

      ExtractNumbers = 0

      End If

      End Function

    4. Закройте редактор VBA.

    Теперь в Excel можно использовать функцию как обычно: =ExtractNumbers(A1). Она вернёт первое найденное число. Если нужно извлечь все числа отдельно, модифицируйте код или используйте массив (пример ниже).

    Сохраните файл как .xlsm (с поддержкой макросов)|Включите макросы в настройках безопасности (Файл → Параметры → Центр управления безопасностью)|Проверьте, нет ли в данных символов, которые могут сломать логику (например, арабские цифры ١٢٣)|Сделайте резервную копию файла перед запуском макроса-->

    Функция ExtractNumbers игнорирует знаки препинания и буквы, но сохраняет порядок цифр. Например, для текста "A1B2,C3!4" результат будет 1234.

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

    Если ваши данные имеют чёткую структуру (например, номер всегда отделен пробелом или табуляцией), можно воспользоваться встроенным инструментом Текст по столбцам. Этот метод не требует формул и подходит для одноразовой обработки больших объёмов данных.

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

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

      Исходные данныеРазделительРезультат (2-й столбец)
      "Товар 45 шт"Пробел45
      "10,20,30"Запятая20
      "ID-789-XYZ"Тире (-)789
      ⚠️ Внимание: Если в тексте несколько чисел, разделенных одинаковым символом (например, "10;20;30"), инструмент создаст несколько столбцов. Чтобы объединить их обратно, используйте функцию СЦЕПИТЬ.

      Метод 5: Формулы массива для извлечения всех чисел

      Для опытных пользователей, которым нужно извлечь все числа из текста в отдельные ячейки (например, из "A1B2C3" получить 1, 2, 3 в разных столбцах), подойдут формулы массива. Этот метод требует знания работы с СТРОЧН, ПОДСТАВИТЬ и НАЙТИ.

      Пример формулы для извлечения первого числа:

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

      Чтобы извлечь второе число, измените формулу:

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

      Эти формулы работают как формулы массива — после ввода нажмите Ctrl+Shift+Enter (в новых версиях Excel достаточно просто Enter).

      Сравнение методов: какой выбрать?

      Выбор метода зависит от структуры данных, версии Excel и ваших навыков. Ниже таблица поможет определиться:

      Метод Сложность Подходит для Ограничения
      ПСТР + ПОИСК Фиксированные шаблоны (например, "Код: 123") Не работает для динамических позиций чисел
      Power Query ⭐⭐ Неструктурированный текст, большие объёмы Требует Excel 2016+
      VBA ⭐⭐⭐ Сложные правила, многострочный текст Нужно разрешить макросы, файл .xlsm
      Текст по столбцам Данные с чёткими разделителями Не подходит для динамических форматов
      Формулы массива ⭐⭐⭐⭐ Извлечение всех чисел по отдельности Замедляет файл, сложно поддерживать

      Для одноразовых задач подойдёт Текст по столбцам или Power Query. Если нужно автоматизировать процесс — VBA. Для простых шаблонов хватит ПСТР.

      FAQ: Частые вопросы по извлечению чисел в Excel

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

      Да, используйте инструмент Текст по столбцам (метод 4) или Power Query (метод 2). Оба варианта не требуют знания формул, но подходят только для данных с чёткой структурой или при разовом использовании.

      Почему функция ExtractNumbers возвращает 0?

      Это происходит, если в тексте нет цифр или макрос не запущен (проверьте настройки безопасности: Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов). Также убедитесь, что ячейка не содержит ошибок (#Н/Д, #ЗНАЧ! и т.д.).

      Как извлечь отрицательные числа или числа с десятичными разделителями?

      Для отрицательных чисел модифицируйте функцию VBA, добавив проверку на знак "-". Для дробных чисел используйте регулярное выражение [-+]?\d+[.,]?\d* в Power Query или функцию:

      =--ПОДСТАВИТЬ(A1; {"0";"1";"2";"3";"4";"5";"6";"7";"8";"9";","; "."}; "")

      Это удалит все символы, кроме цифр и разделителей.

      Можно ли извлечь числа из защищённого листа?

      Да, но с ограничениями:

      • 🔓 Формулы (методы 1 и 5) работают всегда.
      • 🔒 VBA не будет выполняться, если лист защищён от макросов.
      • 🔄 Power Query требует прав на изменение данных (но не меняет исходный лист).

      Лучший вариант для защищённых файлов — создать копию листа (Правка → Переместить/скопировать) и работать с ней.

      Как автоматически обновлять извлечённые числа при изменении исходных данных?

      Это зависит от метода:

      • 🔄 Формулы обновляются автоматически.
      • 🔄 Power Query: щёлкните правой кнопкой по таблице → Обновить.
      • 🛠 VBA: добавьте в код обработчик событий Worksheet_Change.
      • Текст по столбцам не обновляется — придётся повторять процедуру вручную.