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

Вы когда-нибудь сталкивались с ситуацией, когда в ячейке Excel хранится смесь текста и чисел, а вам нужны только цифры? Например, в отчёте приходят данные в формате "Заказ №12345 от 01.01.2023", а для анализа требуется только номер заказа. Или в опросе пользователи ввели возраст вместе с комментариями: "Мне 28 лет, работаю в IT". Ручное выделение чисел из сотен строк отнимает часы — но в Excel есть как минимум 7 способов автоматизировать эту задачу.

В этой статье мы разберём методы разной сложности: от элементарных функций ЛЕВСИМВ и ПСТР до продвинутых регулярных выражений в Power Query. Вы узнаете, как извлекать числа из начала/конца строки, как работать с дробными значениями, и почему иногда проще написать макрос на VBA, чем городить сложные формулы. А в конце — бонус: готовые шаблоны для копирования.

1. Базовые функции: когда числа стоят в начале или конце текста

Если числа в ваших данных расположены предсказуемо — например, всегда в начале или конце строки — достаточно стандартных текстовых функций. Это самый простой и быстрый способ, который не требует знания регулярных выражений или VBA.

Допустим, у вас есть ячейка с текстом "Товар 456 арт.789", и нужно извлечь 456 или 789. Вот как это сделать:

  • 🔢 Число в начале строки: используйте комбинацию ЛЕВСИМВ + НАЙТИ. Формула найдёт первый пробел и вернёт всё, что до него:
    =ЛЕВСИМВ(A1; НАЙТИ(" "; A1) - 1)
  • 🔢 Число в конце строки: здесь поможет ПРАВСИМВ + ПОИСК (ищем последний пробел):
    =ПРАВСИМВ(A1; ДЛСТР(A1) - ПОИСК(" "; A1; ПОИСК(" "; A1; 1) + 1))
  • 🔢 Число после конкретного символа: например, после "арт.". Используйте ПСТР с указанием позиции:
    =ПСТР(A1; НАЙТИ("арт."; A1) + 4; 3)

    Здесь +4 — длина слова "арт.", а 3 — количество символов для извлечения.

⚠️ Внимание: Эти методы работают только если числа имеют фиксированное положение и разделяются ОДНИМ символом (пробелом, запятой и т.д.). Если в строке несколько чисел или разделители разные — читайте дальше.
📊 Какой способ извлечения чисел вы используете чаще?
Ручной ввод
Текстовые функции (ЛЕВСИМВ, ПСТР)
Формулы массива
Power Query
Макросы VBA

2. Формулы массива: извлечение всех чисел из строки

Когда числа разбросаны по тексту хаотично (например, "Клиент 123 оплатил 4500 руб. за 2 товара"), на помощь приходят формулы массива. Они позволяют обработать строку посимвольно и вернуть только цифры.

Самая универсальная формула для извлечения всех чисел из текста:

=ТЕКСТСОЕД(

ЕСЛИОШИБКА(

--ПСТР(

$A1;

МАЛЬЧИК(ЕСЛИ(КОДСИМВ(ПСТР($A1; СТРОКА(ДВССЫЛ("1:" & ДЛСТР($A1))); 1)) >= 48;

ЕСЛИ(КОДСИМВ(ПСТР($A1; СТРОКА(ДВССЫЛ("1:" & ДЛСТР($A1))); 1)) <= 57;

СТРОКА(ДВССЫЛ("1:" & ДЛСТР($A1))); ""); ""));

1

);

""

);

""

)

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

  1. Функция КОДСИМВ проверяет каждый символ строки на принадлежность к цифрам (коды 48–57 в таблице ASCII).
  2. МАЛЬЧИК возвращает позиции всех цифр в строке.
  3. ПСТР извлекает символы по этим позициям.
  4. ТЕКСТСОЕД объединяет результаты в одну строку.
⚠️ Внимание: В Excel 365 и 2019 формулу достаточно ввести как обычно. В старых версиях (2016 и ранее) завершайте ввод нажатием Ctrl+Shift+Enter — это преобразует её в формулу массива.

Убедитесь, что в строке нет буквенных символов между цифрами (например, "1a2b3")

Проверьте версию Excel (в 2016 и старше работают без Ctrl+Shift+Enter)

Скопируйте исходные данные в отдельный столбец на случай ошибок

Используйте ЧИСЛОВОЙ формат для ячейки с результатом-->

3. Power Query: извлечение чисел для больших данных

Если вам нужно обработать тысячи строк или регулярно обновлять данные, Power Query станет вашим лучшим другом. Этот инструмент встроен в Excel 2016+ и позволяет создавать повторяемые процессы очистки данных.

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

  1. Выделите исходные данные и перейдите на вкладку Данные → Из таблицы/диапазона (или Get Data → From Table/Range).
  2. В открывшемся редакторе Power Query выберите столбец с текстом → Преобразовать → Извлечь → Текст после разделителя.
  3. В качестве разделителя укажите Нецифровые символы (в русифицированной версии может называться Нечисловые символы).
  4. Нажмите Закрыть и загрузить — данные появятся на новом листе.

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

  • 🔄 Обрабатывает миллионы строк без замедления.
  • 📊 Сохраняет связь с исходными данными — при их обновлении результат пересчитывается автоматически.
  • 🛠 Позволяет добавлять дополнительные шаги очистки (замена, фильтрация, разбивка по столбцам).
Метод Сложность Макс. строк Поддержка дробных чисел Автообновление
Текстовые функции ~10 000 ❌ Нет ✅ Да
Формулы массива ⭐⭐⭐ ~50 000 ✅ Да ✅ Да
Power Query ⭐⭐ 1 000 000+ ✅ Да ✅ Да
VBA ⭐⭐⭐⭐ ~100 000 ✅ Да ✅ Да

4. Регулярные выражения в Excel (для опытных пользователей)

Excel не поддерживает регулярные выражения напрямую, но их можно использовать через Power Query или VBA. Это самый мощный инструмент для извлечения чисел из текста любого формата — например, когда числа перемежаны с буквами ("R2D2") или содержат разделители ("1 000 000").

В Power Query добавьте пользовательский столбец с формулой:

= Text.Select([YourColumn], {"0-9", "."})

Эта команда оставит в тексте только цифры и точки (для дробных чисел).

Для более сложных шаблонов (например, извлечение чисел с определённым количеством знаков) используйте:

= Text.Select([YourColumn], {"[0-9]{5}"})  // Извлечёт ровно 5 цифр подряд

В VBA регулярные выражения реализуются через объект RegExp:

Function ExtractNumbers(rng As Range) As String

Dim regEx As Object

Set regEx = CreateObject("VBScript.RegExp")

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

regEx.Global = True

ExtractNumbers = regEx.Replace(rng.Value, "$& ")

ExtractNumbers = Trim(ExtractNumbers)

End Function

Пример сложного шаблона для VBA

Чтобы извлечь числа с плавающей точкой (например, "3.14"), используйте шаблон:

regEx.Pattern = "\d+\.\d+"

А для чисел с разделителями тысяч (например, "1 000 000") — шаблон:

regEx.Pattern = "\d{1,3}(?:\s\d{3})+"

5. Макросы VBA: автоматизация для повторяющихся задач

Если вам приходится извлекать числа из текста регулярно, имеет смысл написать макрос на VBA. Это сэкономит время и исключит ошибки при ручном вводе формул.

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

Sub ExtractAllNumbers()

Dim rng As Range

Dim cell As Range

Dim output As String

Dim i As Integer

Set rng = Selection

For Each cell In rng

output = ""

For i = 1 To Len(cell.Value)

If IsNumeric(Mid(cell.Value, i, 1)) Then

output = output & Mid(cell.Value, i, 1)

End If

Next i

cell.Offset(0, 1).Value = Val(output)

Next cell

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите ячейки с исходными данными и запустите макрос (F5).
  4. Результаты появятся в столбце справа.
⚠️ Внимание: Макрос Val(output) преобразует строку в число, но обрезает дробную часть после первого нецифрового символа. Для сохранения дробных чисел замените Val на CDbl.

6. Обработка дробных чисел и отрицательных значений

Извлечение целых чисел — половина дела. Часто в тексте встречаются дроби ("3.14 метров"), отрицательные значения ("температура -5°C") или числа с валютами ("$19.99"). Для таких случаев нужны модифицированные подходы.

Способы обработки:

  • 🔢 Дробные числа: в формулах массива замените --ПСТР на 1*ПСТР, чтобы Excel распознал точку как разделитель:
    =1*ТЕКСТСОЕД(ЕСЛИОШИБКА(ПСТР(...); ""); "")
  • 🔢 Отрицательные числа: добавьте в шаблон регулярного выражения символ минуса:
    regEx.Pattern = "-?\d+\.?\d*"
  • 🔢 Числа с валютами: используйте ПОДСТАВИТЬ, чтобы удалить символы перед числом:
    =ПОДСТАВИТЬ(A1; "$"; "")

Пример формулы для извлечения дробных чисел из текста "Вес: 8.5 кг":

=--ТЕКСТПОСЛЕ(A1; ": ") * (ТЕКСТПОСЛЕ(A1; ": ") <>"")

Здесь ТЕКСТПОСЛЕ берёт текст после ": ", а двойной унарный минус (--) преобразует его в число.

7. Проверка результатов и типичные ошибки

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

  • Пропущенные числа: если в результате появились пустые ячейки, проверьте исходные данные на наличие нестандартных разделителей (например, неразрывный пробел).
  • Лишние символы: числа могут "приклеиться" к буквам, если разделитель не учтён (например, "100р" вместо 100). Используйте ПОДСТАВИТЬ для очистки.
  • Неправильный формат: Excel может воспринимать извлечённые числа как текст (они выравниваются по левому краю). Примените формат Числовой или используйте функцию ЗНАЧЕН.

Чтобы избежать ошибок:

  1. Перед обработкой проверьте данные на однородность (например, везде ли числа отделены пробелами).
  2. Используйте ЕЧИСЛО для проверки результатов:
    =ЕСЛИ(ЕЧИСЛО(B1); "OK"; "Ошибка в " & АДРЕС(СТРОКА(); 1))
  3. Для критичных данных создайте контрольную выборку: вручную извлеките числа из 10–20 строк и сравните с автоматическим результатом.

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

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

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

  1. Текст по столбцам: выделите данные → Данные → Текст по столбцам → укажите разделитель (например, пробел) и выберите столбцы с числами.
  2. Найти и заменить: используйте Ctrl+H, чтобы удалить все нецифровые символы (замените [!0-9] на пустоту, если включена поддержка регулярных выражений).
  3. Power Query: как описано в разделе 3, этот метод не требует знания формул.
Почему формула массива возвращает #ЗНАЧ!?

Ошибка #ЗНАЧ! обычно возникает по трём причинам:

  • В ячейке нет чисел — формула не находит цифр для извлечения.
  • Вы используете Excel 2016 или старше и забыли нажать Ctrl+Shift+Enter.
  • В тексте есть символы, которые формула воспринимает как разделители (например, табуляция или перевод строки).

Решение: проверьте исходные данные на наличие чисел и убедитесь, что формула введена как массив.

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

Дата в текстовом формате — это число, но извлечь его части (день, месяц, год) можно отдельно:

  • Для дня: =ДЕНЬ(ДАТАЗНАЧ(A1))
  • Для месяца: =МЕСЯЦ(ДАТАЗНАЧ(A1))
  • Для года: =ГОД(ДАТАЗНАЧ(A1))
  • Для полной даты в числовом формате: =ДАТАЗНАЧ(A1) (затем отформатируйте ячейку как дату).

Если дата записана в нестандартном формате (например, "25 дек 2023"), используйте ПСТР с указанием позиций или Power Query.

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

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

  • Если лист защищён без разрешения на редактирование ячеек, вы не сможете ввести формулы или запустить макрос.
  • Обходные пути:
    1. Снимите защиту (если знаете пароль).
    2. Скопируйте данные на новый лист (Правка → Специальная вставка → Значения).
    3. Используйте Power Query — он работает независимо от защиты листа.
Как извлечь числа из текста на другом языке (например, арабские или китайские цифры)?

Excel распознаёт только арабские цифры (0–9) как числовые символы. Для других систем счисления:

  • Используйте ПОДСТАВИТЬ, чтобы заменить символы на арабские цифры (например, =ПОДСТАВИТЬ(A1; "۵"; "5") для персидских цифр).
  • В Power Query примените замену перед извлечением чисел.
  • Для автоматической конвертации напишите функцию на VBA с таблицей соответствия символов.
  • Пример функции для персидских цифр:

    Function ConvertPersianNumbers(rng As Range) As String
    

    Dim persianDigits As String, arabicDigits As String

    persianDigits = "۰۱۲۳۴۵۶۷۸۹"

    arabicDigits = "0123456789"

    ConvertPersianNumbers = ""

    For i = 1 To Len(rng.Value)

    char = Mid(rng.Value, i, 1)

    pos = InStr(persianDigits, char)

    If pos > 0 Then

    ConvertPersianNumbers = ConvertPersianNumbers & Mid(arabicDigits, pos, 1)

    Else

    ConvertPersianNumbers = ConvertPersianNumbers & char

    End If

    Next i

    End Function