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

Работа с неструктурированными данными в Microsoft Excel часто требует извлечения числовых значений из текстовых строк. Представьте: у вас таблица с адресами «ул. Ленина, д. 15, кв. 42», номерами телефонов «+7(912)345-67-89» или артикулами «Товар ABC-123-XYZ». Ваша задача — выделить только цифры 15, 42, 9123456789 или 123. Вручную это займёт часы, а с правильными инструментами — минуты.

В этой статье мы разберём 5 проверенных методов — от элементарных функций для новичков до автоматизированных решений для опытных пользователей. Вы узнаете, как обработать данные с помощью стандартных формул, надстроек Power Query, макросов на VBA и даже регулярных выражений. Каждый способ проиллюстрирован примерами и адаптирован под разные версии Excel (2010–2023, Office 365).

⚠️ Важно: если ваши данные содержат числа с десятичными разделителями (например, «3,14 м»), стандартные методы извлечения могут разбить их на отдельные цифры. Для таких случаев в статье есть специальный раздел с решениями.

1. Базовый метод: функции ЛЕВСИМВ, ПРАВСИМВ и ПСТР

Для простейших задач, когда цифры расположены в начале, конце или на фиксированной позиции строки, подойдут текстовые функции. Рассмотрим их на примере извлечения номера дома из адреса «ул. Гагарина, д. 78, корп. 2».

Функция ЛЕВСИМВ вернёт заданное количество символов с начала строки. Если номер дома всегда состоит из 2 цифр:

=ЛЕВСИМВ(B2; НАЙТИ(" "; B2; НАЙТИ("д. "; B2)+3) - (НАЙТИ("д. "; B2)+3))

Но этот подход хрупкий: он сломается, если формат адреса изменится. Более универсально использовать комбинацию ПСТР + НАЙТИ:

=ПСТР(B2; НАЙТИ("д. "; B2)+3; ДЛСТР(B2)-НАЙТИ("д. "; B2)-НАЙТИ(" "; B2; НАЙТИ("д. "; B2)+3)+4)

⚠️ Внимание: эти формулы работают только если структура текста строго фиксирована. Для адресов типа «д.78» (без пробела после «д.») потребуется корректировка:

=ПСТР(B2; НАЙТИ("д."; B2)+2; 2)

Для извлечения цифр из конца строки (например, индекса «123456» в «Москва, 123456») используйте ПРАВСИМВ:

=ПРАВСИМВ(B2; 6)
📊 Какой метод извлечения цифр вы используете чаще?
Ручной ввод
Стандартные функции Excel
Power Query
Макросы VBA
Регулярные выражения

2. Универсальная формула: извлечение всех цифр из текста

Когда цифры разбросаны по строке (например, «Заказ №A-45-B-789»), нужен метод, который соберёт их в одно число. Для этого используем массивную формулу с функциями ТЕКСТПОСЛЕСИМВ, ПОВТОР и ЗАМЕНИТЬ:

=--ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2;"0";"");"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"");"8";"");"9";"")

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

  1. Функция ПОДСТАВИТЬ последовательно удаляет все символы, кроме цифр.
  2. ТЕКСТПОСЛЕСИМВ преобразует результат в число (двойной минус -- убирает ошибку #ЗНАЧ!).

Эта формула извлекает ВСЕ цифры подряд, включая ведущие нули (например, из «Товар 00123» получится 123). Чтобы сохранить нули, используйте формат ячейки «Текстовый».

Для Excel 365 и Excel 2021 есть более элегантное решение с функцией ТЕКСТРАЗД:

=ТЕКСТРАЗД(ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(B2; {"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"}; ""); ","); ";"; 1; 1)

3. Power Query: автоматизированное извлечение цифр

Если данных много (тысячи строк), Power Query справится быстрее формул. Этот инструмент доступен в Excel 2016+ и Office 365 через вкладку Данные → Получить данные → Из таблицы/диапазона.

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

  1. Выделите исходные данные и загрузите их в Power Query.
  2. В редакторе выберите столбец с текстом → Преобразовать → Заменить значения.
  3. В поле «Найти» введите регулярное выражение [^0-9], в «Заменить на» оставьте пусто. Это удалит всё, кроме цифр.
  4. Нажмите Закрыть и загрузить.

Выделить исходный диапазон

Загрузить в Power Query через "Из таблицы/диапазона"

Применить замену по regex [^0-9]

Указать тип данных "Целое число" или "Текст"

Загрузить результат в новую таблицу-->

⚠️ Внимание: если после извлечения цифр в результатах появляются ошибки #ЗНАЧ!, проверьте:

  • 🔹 Формат ячеек результата (должен быть «Общий» или «Текстовый»).
  • 🔹 Наличие неразрывных пробелов (замените их стандартными через =ПОДСТАВИТЬ(B2; СИМВОЛ(160); " ")).

Power Query также позволяет сохранять ведущие нули, если на этапе загрузки выбрать тип данных «Текст».

4. Макросы VBA: извлечение цифр для продвинутых пользователей

Для повторяющихся задач напишите пользовательскую функцию VBA, которая будет доступна как стандартная формула. Откройте редактор VBA (Alt + F11) и вставьте этот код в модуль:

Function ExtractNumbers(rng As Range) As String

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

ExtractNumbers = strOutput

End Function

Теперь в Excel используйте формулу:

=ExtractNumbers(B2)

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

  • 🔹 Работает со всеми версиями Excel (включая 2003).
  • 🔹 Обрабатывает до 10 000 строк за секунду (против 1–2 секунд у формул).
  • 🔹 Сохраняет ведущие нули.

⚠️ Внимание: перед использованием макросов проверьте настройки безопасности (Файл → Параметры → Центр управления безопасностью → Параметры центра → Настройки макросов). Для работы кода выберите «Включить все макросы» (только для доверенных файлов!).

5. Регулярные выражения: точный контроль над извлечением

Для сложных шаблонов (например, извлечение цифр между определёнными символами) используйте регулярные выражения (regex). В Excel их поддерживает Power Query и VBA.

Пример 1: извлечь цифры из строки «ID: 12345-ABC-678» (только первую группу):

=Регулярка.Извлечь(B2; "(\d+)")

Где \d+ — шаблон для одной или более цифр.

Пример 2: извлечь все цифры, включая десятичные дроби (например, «3.14 м» → 3.14):

=Регулярка.Извлечь(B2; "(\d+\.?\d*)")

Для реализации regex в Excel без Power Query потребуется VBA-функция с подключением библиотеки Microsoft VBScript Regular Expressions:

Function ExtractWithRegex(rng As Range, pattern As String) As String

Dim regex As Object

Dim matches As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Global = True

regex.Pattern = pattern

If regex.Test(rng.Value) Then

Set matches = regex.Execute(rng.Value)

ExtractWithRegex = matches(0).Value

Else

ExtractWithRegex = ""

End If

End Function

Вызов функции:

=ExtractWithRegex(B2; "\d+")
Метод Сложность Скорость Сохраняет ведущие нули Подходит для
Стандартные функции ⏳ Медленно ❌ Нет Простые задачи, 100–1000 строк
Power Query ⭐⭐ ⚡ Быстро ✅ Да Большие наборы данных, регулярная обработка
VBA (простой) ⭐⭐ ⚡⚡ Очень быстро ✅ Да Повторяющиеся задачи, любые версии Excel
VBA (regex) ⭐⭐⭐ ⚡⚡ ✅ Да Сложные шаблоны, опытные пользователи

6. Обработка специальных случаев

Не все цифры в тексте нужно извлекать одинаково. Рассмотрим типичные исключения:

1. Десятичные дроби:

Если в строке «Вес: 3.5 кг» нужно сохранить точку как разделитель, используйте:

=--ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2; "."; "#"); ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(B2; {"0";"1";"2";"3";"4";"5";"6";"7";"8";"9";"."}; ""); "#"); "")

2. Отрицательные числа:

Для строк типа «Температура: -15°C» модифицируйте regex-шаблон:

=ExtractWithRegex(B2; "-?\d+")

3. Римские цифры:

Чтобы исключить римские цифры (например, «XXI век»), добавьте проверку:

=ЕСЛИ(ИЛИ(B2="I"; B2="V"; B2="X"; B2="L"; B2="C"; B2="D"; B2="M"); ""; ExtractNumbers(B2))
Как извлечь цифры из PDF или сканированного документа?

Для этого сначала преобразуйте PDF в Excel с помощью инструментов OCR (например, Adobe Acrobat Pro или бесплатный OnlineOCR.net). Затем примените любой метод из этой статьи. Обратите внимание: OCR может распознавать цифры как символы (например, «О» вместо «0»), поэтому после конвертации проверьте данные на ошибки.

⚠️ Внимание: если после извлечения цифр результаты отображаются как даты (например, «1-2» превращается в «02-янв»), измените формат ячейки на «Текстовый» до ввода формулы.

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

Выбор метода зависит от объёма данных, структуры текста и вашего уровня владения Excel:

  • 🔹 1–100 строк, простой текст: стандартные функции (ПСТР, ЛЕВСИМВ).
  • 🔹 100–10 000 строк, повторяющаяся задача: Power Query или простой VBA-макрос.
  • 🔹 Сложные шаблоны (телефоны, артикулы): VBA с регулярными выражениями.
  • 🔹 Единоразовая задача, Excel 365: функция ТЕКСТРАЗД.

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

Как извлечь цифры из ячейки, если они разделены буквами (например, «A1B2C3» → 123)?

Используйте массивную формулу:

=--ТЕКСТПОСЛЕСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(B2;"0";"");"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"");"8";"");"9";"")

Или VBA-функцию ExtractNumbers из раздела 4.

Почему после извлечения цифр получается ошибка #ЗНАЧ!?

Причины и решения:

  • 🔹 В исходной ячейке нет цифр → проверьте данные.
  • 🔹 Формула массива не подтверждена Ctrl+Shift+Enter (для Excel 2019 и старше не актуально).
  • 🔹 Ячейка результата отформатирована как «Дата» → измените формат на «Общий».
Можно ли извлечь цифры из защищённого листа?

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

  • 🔹 Формулы будут работать, если ячейки не заблокированы для чтения.
  • 🔹 VBA-макросы потребуют временного снятия защиты (пароль нужно знать).
  • 🔹 Power Query обходит защиту листа, так как работает с копией данных.
Как извлечь цифры из ячеек с ошибками (#Н/Д, #ДЕЛ/0!)?

Оберните формулу в ЕСЛИОШИБКА:

=ЕСЛИОШИБКА(ExtractNumbers(B2); "")

Или используйте Power Query, где ошибки автоматически фильтруются на этапе загрузки.

Есть ли разница между извлечением цифр в Excel и Google Sheets?

Да, в Google Sheets:

  • 🔹 Нет Power Query, но есть аналогичная надстройка Apps Script.
  • 🔹 Функция REGEXEXTRACT заменяет VBA-решения:
    =REGEXEXTRACT(B2; "\d+")
  • 🔹 Массивные формулы вводятся без Ctrl+Shift+Enter.