Работа с данными в Microsoft Excel часто осложняется тем, что числа хранятся вместе с текстовыми символами: "10 кг", "5 м²", "20% скидка" или "Артикул #12345". Стандартные функции вроде СУММ() игнорируют такие ячейки, а ручное разделение данных отнимает часы. Между тем, в 80% случаев эти числа можно автоматически извлечь и использовать в расчётах — без макросов и сторонних надстроек.
Проблема актуальна для бухгалтеров (анализ накладных с весами), логистов (подсчёт объёмов грузов), маркетологов (разбор отчётов с процентами) и даже HR-специалистов (обработка анкет с возрастом в формате "35 лет"). В этой статье разберём 5 проверенных методов — от простых функций до продвинутых формул массива, — которые превратят "нечитаемые" данные в готовые для анализа цифры.
———
Почему Excel не видит числа в тексте?
Причина кроется в типе данных: Excel воспринимает "15 кг" как текст, а не как число 15 с единицей измерения. Алгоритм обработки ячеек работает так:
- 🔍 Автоматическое определение типа: если в ячейке есть хоть один нецифровой символ (кроме разделителей тысяч и десятичной точки), Excel присваивает формат Текст.
- ❌ Игнорирование в формулах: функции
СУММ(),СРЗНАЧ()и другие пропускают текстовые ячейки, даже если они содержат цифры. - ⚠️ Скрытые символы: иногда числа "портит" невидимый пробел или перенос строки (например, при импорте из PDF).
Интересный факт: в Google Sheets часть функций (например, SUM) автоматически извлекает числа из текста, тогда как Excel требует явного указания. Это одна из причин, почему пользователи переходят на альтернативные табличные редакторы для работы с "грязными" данными.
⚠️ Внимание: если вы импортировали данные из внешнего источника (например, 1С или CRM-системы), сначала проверьте наличие скрытых символов функцией =КОДСИМВ(ЛЕВСИМВ(A1;1)). Коды от 0 до 31 указывают на непечатаемые знаки.
Метод 1: Функции ЛЕВСИМВ, ПРАВСИМВ и ПСТР для простых случаев
Если числа в тексте всегда стоят в одном и том же месте (например, "Вес: 10 кг" или "20м²"), можно использовать комбинацию функций для извлечения подстрок:
- 📌
=ЛЕВСИМВ(A1;2)— вернёт первые 2 символа (подходит для "10 кг" →10). - 📌
=ПРАВСИМВ(A1;3)— вернёт последние 3 символа (для "Скидка 15% →15%). - 📌
=ПСТР(A1;8;2)— извлечёт 2 символа, начиная с 8-й позиции (для "Артикул #123" →12).
Главный недостаток метода — хрупкость: если формат данных изменится (например, вместо "10 кг" появится "10.5 кг"), формулы перестанут работать. Для надёжности комбинируйте их с ЗАМЕНИТЬ():
=ЗАМЕНИТЬ(ЛЕВСИМВ(A1;НАЙТИ(" кг";A1)-1);" ";"")
Эта формула найдёт позицию подстроки " кг", отсечёт всё до неё и удалит пробелы.
Метод 2: Преобразование текста в число с помощью ЗНАЧЕН
Функция =ЗНАЧЕН(текст) преобразует строки в числа, но только если текст представляет собой корректное числовое значение. Например:
- ✅ Работает:
=ЗНАЧЕН("15")→15,=ЗНАЧЕН("10.5")→10,5. - ❌ Не работает:
=ЗНАЧЕН("15 кг")→ ошибка#ЗНАЧ!.
Чтобы обойти ограничение, предварительно очистите текст от лишних символов:
=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" кг";"");" м";"");" %";""))
Эта формула последовательно удаляет " кг", " м" и " %", оставляя только цифры. Для удобства можно создать пользовательскую функцию (макрос) на VBA, если таких операций много.
| Исходный текст | Формула | Результат |
|---|---|---|
| "15 кг" | =ЗНАЧЕН(ПОДСТАВИТЬ(A1;" кг";"")) |
15 |
| "20.5 м²" | =ЗНАЧЕН(ПОДСТАВИТЬ(A1;" м²";"")) |
20,5 |
| "Скидка 30%" | =ЗНАЧЕН(ПРАВСИМВ(A1;3))/100 |
0,3 |
⚠️ Внимание: функцияЗНАЧЕНне распознаёт десятичные разделители в формате "10,5" (с запятой). Заменяйте запятую на точку перед преобразованием:=ЗНАЧЕН(ПОДСТАВИТЬ(A1;",";".")).
Метод 3: Регулярные выражения (для Excel 365 и 2021)
В новых версиях Excel (начиная с Microsoft 365) появились функции для работы с регулярными выражениями: ТЕКСТПОСЛЕ(), ТЕКСТДО(), ТЕКСТРАЗД() и ЗАМЕНИТЬРЕГ(). Они позволяют гибко извлекать числа из любого текста.
Примеры:
- 🔢 Извлечь все цифры из "Артикул ABC-123-XYZ":
=--ТЕКСТРАЗД(ПОДСТАВИТЬ(A1;"-";" ");" ";2)Функция заменяет дефисы на пробелы, разбивает строку по пробелам и возвращает второй элемент (123), который преобразуется в число двойным минусом (
--). - 🔢 Вытащить число перед "кг" в "Вес нетто: 10.5 кг":
=--ЗАМЕНИТЬРЕГ(A1;"^.+?(\d+\.?\d*)\s*кг.+$";"$1")Регулярное выражение ищет первую группу цифр перед "кг" и заменяет всю строку на найденное число.
Критичная особенность: эти функции работают только в Excel 365 и Excel 2021. В старых версиях (2019 и ранее) для регулярных выражений потребуется VBA или надстройка Power Query.
Убедиться, что версия Excel не старше 2021|
Проверить наличие пробелов перед/после чисел|
Заменить десятичные запятые на точки|
Сохранить оригинальные данные в отдельном столбце-->
Метод 4: Power Query — мощный инструмент для очистки данных
Power Query (доступен в Excel 2016+) — это встроенный ETL-инструмент для трансформации данных. Он идеален для обработки больших массивов ячеек с числами в тексте. Алгоритм действий:
- Выделите исходные данные → перейдите на вкладку
Данные→Из таблицы/диапазона. - В открывшемся редакторе Power Query выберите столбец с текстом →
Трансформировать→Извлечь→Текст до разделителяилиТекст после разделителя. - Укажите разделитель (например, " кг") и подтвердите.
- Измените тип данных столбца на
Числовой. - Нажмите
Закрыть и загрузить.
Преимущества метода:
- ✅ Обрабатывает миллионы строк без замедления.
- ✅ Сохраняет шаги трансформации для повторного использования.
- ✅ Позволяет объединять данные из нескольких источников.
Пример: если у вас есть столбец с данными "10 ящиков по 5 кг", в Power Query можно:
- Разделить текст по слову "по" → получите два столбца: "10 ящиков" и "5 кг".
- Из каждого извлечь числа с помощью
Текст до разделителя(разделитель — пробел). - Перемножить результаты:
10 * 5 = 50 кг.
Как автоматизировать обновление данных в Power Query?
Созданный запрос можно обновить в один клик: перейдите на вкладку Данные → Обновить все. Если источник данных — файл (например, CSV), Excel будет подтягивать актуальные значения при каждом обновлении. Для автоматического обновления при открытии файла настройте параметры в Свойства соединения → Обновление → Обновлять при открытии файла.
Метод 5: Пользовательские функции на VBA (для продвинутых)
Если вам регулярно приходится работать с числами в тексте, имеет смысл создать собственную функцию на VBA. Например, функция =ИЗВЛЕЧЬЧИСЛО(текст) может извлекать первое число из любой строки:
Function ИЗВЛЕЧЬЧИСЛО(rng As Range) As Double
Dim str As String, i As Integer, numStr As String
str = rng.Value
numStr = ""
For i = 1 To Len(str)
If IsNumeric(Mid(str, i, 1)) Or Mid(str, i, 1) = "." Or Mid(str, i, 1) = "," Then
numStr = numStr & Mid(str, i, 1)
End If
Next i
If numStr <> "" Then
numStr = Replace(numStr, ",", ".")
ИЗВЛЕЧЬЧИСЛО = CDbl(numStr)
Else
ИЗВЛЕЧЬЧИСЛО = 0
End If
End Function
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert→Module). - Сохраните файл как Macro-Enabled Workbook (.xlsm).
- Теперь в Excel можно использовать
=ИЗВЛЕЧЬЧИСЛО(A1).
Функция обрабатывает:
- 🔹 Целые числа: "10 кг" →
10. - 🔹 Дробные числа: "3.14 м" →
3,14. - 🔹 Числа с запятыми: "1,5 л" →
1,5(заменяет запятую на точку). - 🔹 Текст без чисел: "Нет данных" →
0.
⚠️ Внимание: макросы могут быть отключены по умолчанию из-за настроек безопасности. Чтобы разрешить их выполнение, перейдите в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов и выберите "Включить все макросы" (не рекомендуется для файлов из ненадёжных источников).
Типичные ошибки и как их избежать
Даже опытные пользователи допускают ошибки при работе с числами в тексте. Рассмотрим самые распространённые:
| Ошибка | Причина | Решение |
|---|---|---|
Формула возвращает #ЗНАЧ! |
В ячейке нет чисел или функция ЗНАЧЕН применяется к тексту без цифр. |
Добавьте проверку =ЕСЛИОШИБКА(ЗНАЧЕН(...);0). |
| Неправильное округление | Функции вроде ЛЕВСИМВ обрезают дробную часть (например, "10.5" → 10). |
Используйте ПСТР с динамической длиной или регулярные выражения. |
| Медленная работа файла | Слишком много формул массива или вложенных ЕСЛИ. |
Замените формулы на Power Query или VBA. |
Ещё одна частая проблема — разные разделители. Например, в одном столбце могут быть данные "10,5 кг", а в другом — "10.5 kg". Чтобы унифицировать их, используйте:
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;",";".");" ";"")
Эта формула заменяет запятые на точки и удаляет пробелы, подготавливая данные для ЗНАЧЕН.
FAQ: Ответы на частые вопросы
Можно ли суммировать ячейки с текстом напрямую, без извлечения чисел?
Нет, стандартные функции Excel (СУММ, СРЗНАЧ) игнорируют текстовые ячейки. Однако можно использовать формулу массива:
=СУММ(--ТЕКСТРАЗД(ПОДСТАВИТЬ(A1:A10;" кг";" ");" "))
Эта формула работает только в Excel 365 и требует нажатия Ctrl+Shift+Enter в старых версиях.
Как извлечь число из формата "1 000 руб." (с пробелом-разделителем)?
Используйте комбинацию ПОДСТАВИТЬ и ЗНАЧЕН:
=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" руб.";"");" ";""))
Сначала удаляется " руб.", затем пробелы, после чего строка преобразуется в число.
Почему после извлечения числа оно отображается как дата (например, 10-май)?
Excel автоматически преобразует числа в формат даты, если ячейка была текстовая. Чтобы избежать этого:
- Перед вводом формулы отформатируйте ячейку как
ЧисловойилиОбщий. - Используйте апостроф перед числом:
'=ЗНАЧЕН(A1)(временное решение).
Как обработать данные в формате "от 10 до 20 кг" (диапазон чисел)?
Для извлечения обоих чисел используйте Power Query или VBA. Пример на VBA:
Function ИЗВЛЕЧЬДИАПАЗОН(rng As Range, num As Integer) As Double
Dim str As String, arr() As String
str = rng.Value
str = Replace(str, "от ", "")
str = Replace(str, " до ", " ")
arr = Split(str, " ")
If num = 1 Then ИЗВЛЕЧЬДИАПАЗОН = CDbl(arr(0)) Else ИЗВЛЕЧЬДИАПАЗОН = CDbl(arr(1))
End Function
Теперь =ИЗВЛЕЧЬДИАПАЗОН(A1;1) вернёт первое число, а =ИЗВЛЕЧЬДИАПАЗОН(A1;2) — второе.
Есть ли надстройки для упрощения работы с такими данными?
Да, популярные надстройки:
- 🛠️ Kutools for Excel — имеет инструмент "Extract Numbers" (извлечение чисел).
- 🛠️ Ablebits — функция "Convert text to numbers".
- 🛠️ Power Tools — пакет для очистки данных.
Все они платные, но предлагают бесплатные пробные версии.