Проблема: числа «спрятаны» в тексте
Вы скачали отчёт из CRM, получили данные от коллеги или экспортировали таблицу из базы — и вместо чистых цифр в ячейках Excel красуется смесь текста, символов и чисел. «Заказ №12345 от 01.05.2026», «Цена: 1500 руб.», «Артикул AB-42-789» — как из этого хаоса извлечь только числа для дальнейших расчётов?
Вручную копировать сотни значений? Забудьте. Excel предлагает минимум 8 способов автоматизации — от элементарных функций до сложных регулярных выражений. Но каждый метод имеет ограничения: одни работают только с целыми числами, другие ломаются на дробных разделителях, третьи требуют знания VBA. Мы разберём все варианты — с примерами, скрытыми ловушками и альтернативами для экстренных случаев.
Важно: если вы работаете с Excel Online или мобильной версией, часть методов будет недоступна. Об этом — в отдельном разделе.
Способ 1: Функция ПРЕОБР (VALUE) для «чистых» чисел в тексте
Самый простой случай: в ячейке текст, который выглядит как число, но Excel воспринимает его как строку. Например, «123» (без кавычек) или «3,14». Здесь поможет функция ПРЕОБР (или VALUE в английской версии):
=ПРЕОБР(A1)
Функция преобразует текстовое представление числа в числовой формат. Но есть критические нюансы:
- 🔹 Работает только если в ячейке только число (возможно, с разделителями тысяч или дробной частью). Любой лишний символ — и формула вернёт ошибку
#ЗНАЧ!. - 🔹 В русскоязычных версиях Excel дробная часть должна разделяться запятой, а не точкой. Если в данных используется точка (например, «1.5»), замените её предварительно функцией
ПОДСТАВИТЬ. - 🔹 Не обрабатывает отрицательные числа в скобках (например, «(100)»). Для них нужен обходной путь с
ЕСЛИОШИБКА.
⚠️ Внимание: Если после примененияПРЕОБРчисла в столбце выровнялись по левому краю (как текст), проверьте формат ячейки. Выделите диапазон →Главная → Формат → Формат ячеек→ выберите «Числовой» или «Общий».
Способ 2: Комбинация ЛЕВСИМВ + ПРАВСИМВ для чисел в начале/конце строки
Когда число расположено в фиксированной позиции (например, всегда первые 5 символов или последние 3), используйте связку ЛЕВСИМВ (LEFT) и ПРАВСИМВ (RIGHT). Пример для числа в начале:
=ПРЕОБР(ЛЕВСИМВ(A1; 5))
Для числа в конце (последние 3 символа):
=ПРЕОБР(ПРАВСИМВ(A1; 3))
Но что если длина числа варьируется? Например, в ячейках могут быть значения «Товар 12», «Товар 123», «Товар 1». Здесь поможет поиск позиций разделителей:
=ПРЕОБР(ПРАВСИМВ(A1; ДЛСТР(A1) - ПОИСК(" "; A1)))
Эта формула:
- Находит позицию пробела в тексте (
ПОИСК(" "; A1)). - Вычитает её из общей длины строки (
ДЛСТР(A1)), чтобы получить количество символов после пробела. - Извлекает правую часть строки с числом (
ПРАВСИМВ). - Преобразует результат в число (
ПРЕОБР).
Способ 3: Функция ПОИСК + ПСТР для чисел в середине текста
Допустим, числа «спрятаны» внутри строки, как в примере «Артикул: AB-42-789». Чтобы их извлечь, нужно:
- Найти начальную позицию числа.
- Найти конечную позицию (или длину числового фрагмента).
- Вырезать фрагмент функцией
ПСТР(MID).
Формула для извлечения числа после «AB-» (предполагаем, что длина числа фиксирована — 3 символа):
=ПРЕОБР(ПСТР(A1; ПОИСК("AB-"; A1) + 3; 3))
Для переменной длины числа используйте вложенные функции ПОИСК, чтобы найти следующий разделитель. Например, для «Артикул: AB-42-789»:
=ПРЕОБР(ПСТР(A1; ПОИСК("-"; A1; ПОИСК("AB-"; A1)) + 1; ПОИСК("-"; A1; ПОИСК("AB-"; A1) + 1) - ПОИСК("-"; A1; ПОИСК("AB-"; A1)) - 1))
Разберём по шагам:
- 🔹
ПОИСК("AB-"; A1)— находим позицию префикса «AB-». - 🔹
ПОИСК("-"; A1; ПОИСК("AB-"; A1))— ищем следующий дефис после «AB-» (начало числа). - 🔹
ПОИСК("-"; A1; ПОИСК("AB-"; A1) + 1)— ищем дефис после начала числа (конец числа). - 🔹
ПСТРвырезает фрагмент между этими дефисами.
⚠️ Внимание: Если в тексте несколько одинаковых разделителей (например, «AB-42-789-1»), формула извлечёт только первый числовой фрагмент. Для сложных шаблонов лучше использовать регулярные выражения (см. Способ 7).
| Исходный текст | Формула | Результат |
|---|---|---|
| Артикул: AB-42-789 | =ПРЕОБР(ПСТР(A1;9;3)) |
42 |
| Заказ №12345 от 01.05 | =ПРЕОБР(ПСТР(A1;7;5)) |
12345 |
| Цена: 1500 руб. | =ПРЕОБР(ПСТР(A1;7;4)) |
1500 |
| ID-789-XYZ | =ПРЕОБР(ПСТР(A1;4;3)) |
789 |
Способ 4: Текст по столбцам (разбор на компоненты)
Если числа в тексте следуют одному шаблону (например, всегда после двоеточия или перед пробелом), используйте инструмент Текст по столбцам:
- Выделите столбец с данными.
- Перейдите на вкладку
Данные→Текст по столбцам. - Выберите «С разделителями» → нажмите
Далее. - Укажите разделитель (пробел, запятая, точка с запятой и т.д.) или задайте фиксированную ширину.
- Нажмите
Готово— Excel разобьёт текст на отдельные столбцы.
Пример: для строки «Цена: 1500 руб.» с разделителем «:» и « » (пробел) вы получите три столбца: «Цена», «1500», «руб.». Останется только скопировать числовой столбец.
Плюсы метода:
- 🔹 Не требует знания функций.
- 🔹 Визуально понятно, какие данные куда попали.
- 🔹 Можно обработать сразу весь столбец.
Минусы:
- 🔹 Не подходит для динамических данных (при обновлении исходного столбца разбивку придётся делать заново).
- 🔹 Сложно автоматизировать (нет формулы для повторного использования).
Сделайте резервную копию данных|Проверьте, что разделитель единственный в строке|Убедитесь, что рядом есть пустые столбцы для результата|Отключите объединение ячеек в исходном диапазоне-->
Способ 5: Формулы массива для сложных шаблонов
Когда числа «разбросаны» по тексту без чётких разделителей (например, «12товаров3штуки»), на помощь приходят формулы массива. Они позволяют обработать каждый символ строки по отдельности.
Формула для извлечения всех чисел из строки (вводится как формула массива — завершайте нажатием Ctrl+Shift+Enter в старых версиях Excel):
=СЦЕПИТЬ(ЕСЛИОШИБКА(--ПСТР($A1;СТРОКА(D1:D100);1);""))
Как это работает:
ПСТР($A1;СТРОКА(D1:D100);1)— извлекает каждый символ строки по очереди (1-й, 2-й, ..., 100-й).--(двойной минус) пытается преобразовать символ в число. Если символ не числовой — возникает ошибка.ЕСЛИОШИБКАзаменяет ошибки на пустую строку.СЦЕПИТЬобъединяет все числовые символы в одну строку.
Для извлечения первого числа в строке используйте:
=ПРЕОБР(ЛЕВСИМВ(ПОДСТАВИТЬ(A1;ЛЕВСИМВ(A1;ПОИСКМН(ИСЧИСЛЗНАК(A1);СТРОКА($1:$10));1));"");ПОИСКМН(ИСЧИСЛЗНАК(A1);СТРОКА($1:$10));1)))
Эта формула:
- 🔹 Находит позицию первого числового символа (
ПОИСКМН+ИСЧИСЛЗНАК). - 🔹 Извлекает все символы до первого нечислового (
ЛЕВСИМВ+ПОДСТАВИТЬ).
⚠️ Внимание: Формулы массива могут значительно тормозить большие таблицы (от 10 000 строк). Для оптимизации преобразуйте их в значения после расчёта: скопируйте результаты → Правка → Специальная вставка → Значения.
Что такое ИСЧИСЛЗНАК?
Функция ИСЧИСЛЗНАК (или ISNUMBER в английской версии) проверяет, является ли значение числом. В формулах массива она применяется к каждому символу строки, возвращая ИСТИНА для цифр и ЛОЖЬ для остальных символов. Это позволяет найти позиции чисел в тексте без регулярных выражений.
Способ 6: Power Query (Get & Transform) для массовой обработки
Если данных много (тысячи строк) и они постоянно обновляются, используйте Power Query — инструмент для преобразования данных, встроенный в Excel 2016 и новее.
Алгоритм действий:
- Выделите исходный диапазон →
Данные → Получение данных → Из таблицы/диапазона. - В открывшемся редакторе Power Query выберите столбец с текстом →
Преобразовать → Извлечь → Текст после разделителя(или «Текст перед разделителем»). - Укажите разделитель (например, пробел или двоеточие).
- При необходимости повторите извлечение для второго разделителя.
- Измените тип данных столбца на «Числовой» (
Главная → Тип данных → Целое числоили «Десятичное число»). - Нажмите
Закрыть и загрузить.
Преимущества Power Query:
- 🔹 Независимость от формул — данные обновляются автоматически при изменении источника.
- 🔹 Возможность сохранить шаги обработки для повторного использования.
- 🔹 Поддержка регулярных выражений (в новых версиях Excel).
Недостатки:
- 🔹 Требует изучения интерфейса (не так интуитивно, как формулы).
- 🔹 В Excel 2013 и старше Power Query устанавливается как надстройка.
Способ 7: Регулярные выражения (UDF на VBA)
Для максимальной гибкости (например, извлечение чисел из текста вида «3 яблока, 5 груш и 1 ананас») напишите пользовательскую функцию на VBA с использованием регулярных выражений.
Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и добавьте код:
Function ExtractNumbers(ByVal text As String) As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
With regex
.Pattern = "\d+" ' Ищем последовательности цифр
.Global = True
End With
If regex.Test(text) Then
ExtractNumbers = regex.Execute(text)(0)
Else
ExtractNumbers = "Нет чисел"
End If
End Function
Теперь в Excel можно использовать функцию =ExtractNumbers(A1), которая вернёт первое число из текста. Для извлечения всех чисел модифицируйте код:
Function ExtractAllNumbers(ByVal text As String) As String
Dim regex As Object, matches, match
Set regex = CreateObject("VBScript.RegExp")
With regex
.Pattern = "\d+"
.Global = True
End With
If regex.Test(text) Then
Set matches = regex.Execute(text)
For Each match In matches
ExtractAllNumbers = ExtractAllNumbers & match.Value & " "
Next match
ExtractAllNumbers = Trim(ExtractAllNumbers)
Else
ExtractAllNumbers = "Нет чисел"
End If
End Function
Примеры шаблонов для разных случаев:
| Задача | Регулярное выражение | Пример |
|---|---|---|
| Целые числа | \d+ |
«123» из «Товар 123» |
| Дробные числа (с запятой) | \d+,\d+ |
«3,14» из «Pi=3,14» |
| Числа с разделителями тысяч | \d{1,3}(?:\s\d{3})* |
«1 000 000» из «Бюджет: 1 000 000 руб.» |
| Отрицательные числа | -\d+ |
«-40» из «Температура: -40°C» |
⚠️ Внимание: Макросы и VBA отключены по умолчанию в файлах, полученных из интернета или по почте. Чтобы функция заработала, сохраните файл как .xlsm (с поддержкой макросов) и разрешите их выполнение в Файл → Параметры → Центр управления безопасностью.
Способ 8: Онлайн-сервисы и надстройки (для нетехнических пользователей)
Если формулы и VBA кажутся слишком сложными, воспользуйтесь готовыми решениями:
Надстройки для Excel:
- 🔹 Kutools for Excel — пакет инструментов с функцией «Extract Numbers» (извлечение чисел из текста в один клик).
- 🔹 Ablebits — надстройка с гибкими настройками для работы с текстом.
- 🔹 Power Tools — поддерживает регулярные выражения и пакетную обработку.
Онлайн-инструменты:
- 🔹 TextFixer — извлекает числа из текста (можно скопировать данные из Excel и вставить обратно).
- 🔹 ConvertCSV — обрабатывает CSV-файлы с извлечением чисел.
- 🔹 Regex101 — тестирование регулярных выражений перед использованием в Excel.
Плюсы внешних инструментов:
- 🔹 Не требуют знания Excel.
- 🔹 Часто имеют визуальный интерфейс для настройки.
Минусы:
- 🔹 Конфиденциальность: данные передаются на сторонние серверы.
- 🔹 Ограничения на объём (например, не более 10 000 строк за раз).
- 🔹 Надстройки обычно платные (от $20 до $100).
FAQ: Частые вопросы и ошибки
Почему функция ПРЕОБР возвращает ошибку #ЗНАЧ!, хотя в ячейке точно число?
Причины:
- В тексте есть невидимые символы (пробелы, табуляции, неразрывные пробелы). Используйте
=СЖПРОБЕЛЫ(A1)для очистки. - Дробная часть отделена точкой, а не запятой (в русскоязычных версиях Excel). Замените точку на запятую:
=ПОДСТАВИТЬ(A1; "."; ","). - Число записано в экспоненциальной форме (например, «1E+05»). Используйте
=ПРЕОБР(ПОДСТАВИТЬ(A1; "E"; "e")).
Как извлечь число из даты в тексте (например, «01.05.2026»)?
Используйте функции для работы с датами:
- Для дня:
=ДЕНЬ(ДАТАЗНАЧ(A1)). - Для месяца:
=МЕСЯЦ(ДАТАЗНАЧ(A1)). - Для года:
=ГОД(ДАТАЗНАЧ(A1)).
Если текст не распознаётся как дата, предварительно замените разделители на стандартный формат:
=ДАТАЗНАЧ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; "."; "/"); " "; "/"))
Можно ли извлечь числа из Excel Online или мобильной версии?
В Excel Online и мобильных приложениях доступны:
- 🔹 Базовые функции:
ЛЕВСИМВ,ПРАВСИМВ,ПСТР,ПРЕОБР. - 🔹 Инструмент
Текст по столбцам.
Недоступны:
- 🔹 Формулы массива (требуют
Ctrl+Shift+Enter). - 🔹 Power Query (кроме Excel для Windows/Mac).
- 🔹 Макросы и VBA.
Альтернатива: обработайте данные на ПК, затем откройте файл в мобильной версии.
Как извлечь число из ячейки, если оно записано словами (например, «сто двадцать три»)?
Excel не умеет автоматически конвертировать текстовые числа в цифры. Решения:
- Ручной ввод (если данных мало).
- Надстройки:
- Kutools for Excel имеет функцию «Convert Number Words to Numbers».
- Ablebits поддерживает аналогичное преобразование.
Пример простого словаря для чисел от 0 до 999:
Function TextToNumber(ByVal text As String) As Variant
Dim dict As Object, words() As String, i As Integer, result As Long
Set dict = CreateObject("Scripting.Dictionary")
' Здесь добавляем соответствия "один" → 1, "два" → 2 и т.д.
dict.Add "ноль", 0: dict.Add "один", 1: dict.Add "два", 2
' ... (заполните до 999)
words = Split(LCase(text), " ")
For i = LBound(words) To UBound(words)
If dict.Exists(words(i)) Then
result = result + dict(words(i))
End If
Next i
TextToNumber = result
End Function
Почему после извлечения числа оно отображается в экспоненциальной форме (например, 1E+10)?
Это происходит, когда:
- 🔹 Формат ячейки установлен как «Общий» или «Экспоненциальный». Измените его на «Числовой»:
- Выделите ячейки →
Главная → Формат → Формат ячеек. - Выберите «Числовой» и укажите количество десятичных знаков.
- Разбейте число на части (например, храните в двух ячейках).
- Используйте текстовый формат (но тогда не сможете выполнять математические операции).