Работа с данными в Microsoft Excel часто требует преобразования текстовых строк в чистые числовые значения. Одна из самых распространённых проблем — когда числа «склеены» с единицами измерения: 15 кг, 200 м², 3.14 см или 1000 руб. Такие данные невозможно использовать в формулах, диаграммах или сводных таблицах без предварительной обработки.
Многие пользователи пытаются вручную удалять текстовые символы или копировать числа в отдельный столбец — это неэффективно при больших объёмах данных. К счастью, в Excel есть несколько способов автоматизировать процесс: от простых функций ЛЕВСИМВ и ПСТР до продвинутых инструментов типа Power Query и VBA-макросов. В этой статье разберём все методы — от базовых до профессиональных — с примерами и нюансами.
Особое внимание уделим случаям, когда единицы измерения могут варьироваться (например, кг/г/тонны в одном столбце) или когда числа записаны с пробелами и без. Также рассмотрим, как избежать ошибок при преобразовании дробных чисел (например, 1.5 м → 1,5) и как сохранить форматирование после очистки данных.
Если вы работаете с финансовыми отчётами, техническими спецификациями или научными данными, где единицы измерения мешают анализу — этот гайд поможет сэкономить часы рутинной работы. Начнём с самых простых решений и постепенно перейдём к универсальным методам.
1. Базовые функции Excel: ЛЕВСИМВ, ПСТР и ПОИСК
Для большинства задач хватит стандартных текстовых функций. Их главное преимущество — простота и отсутствие необходимости в макросах или надстройках. Рассмотрим три ключевые функции:
- 🔹
ЛЕВСИМВ— извлекает заданное количество символов с начала строки. Подходит, если все числа имеют одинаковую длину (например, 100 г →=ЛЕВСИМВ(A1; 3)вернёт 100). - 🔹
ПСТР— вырезает фрагмент текста по заданным позициям. Универсальнее, чемЛЕВСИМВ, но требует знания точного положения числа. - 🔹
ПОИСК— находит позицию первого вхождения символа (например, пробела или буквы). Часто используется вместе сПСТРдля динамического извлечения.
Пример формулы для строк типа 15.5 кг:
=ПСТР(A1; 1; ПОИСК(" "; A1) - 1)
Эта формула ищет первый пробел и возвращает все символы до него. Если пробелов нет (например, 100г), используйте ПОИСКПОЗ для поиска первой буквы:
=ПСТР(A1; 1; МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9}; A1 & "0123456789") - 1)
Важно: последняя формула работает только как формула массива (вводите её через Ctrl+Shift+Enter в старых версиях Excel).
Минус этого метода — он не преобразует текст в число автоматически. После извлечения применяйте ЗНАЧЕН:
=ЗНАЧЕН(ПСТР(A1; 1; ПОИСК(" "; A1) - 1))
⚠️ Внимание: Если в ячейке несколько пробелов (например, 10 000 руб), функцияПОИСКвернёт позицию первого пробела. ИспользуйтеПОДСТАВИТЬдля удаления лишних пробелов перед обработкой.
2. Функция ПОДСТАВИТЬ для удаления единиц измерения
Когда единицы измерения одинаковые во всём столбце (например, м² или шт), проще всего удалить их функцией ПОДСТАВИТЬ. Синтаксис:
=ПОДСТАВИТЬ(A1; " м²"; "")
Эта формула заменит все вхождения " м²" на пустую строку, оставив только число.
Для динамического удаления любых нечисловых символов комбинируйте ПОДСТАВИТЬ с массивом символов:
=--ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; "кг"; ""); "г"; ""); " "; "")
Здесь двойной минус (--) преобразует текст в число, а вложенные ПОДСТАВИТЬ убирают "кг", "г" и пробелы.
Преимущество метода — простота и наглядность. Недостаток — нужно заранее знать все возможные единицы измерения в данных. Если в столбце встречаются кг, грамм и тонны, формула усложнится.
3. Регулярные выражения через Power Query (Excel 2016+)
Power Query (вкладка Данные → Получить данные) — мощный инструмент для трансформации данных, поддерживающий регулярные выражения. Это идеальное решение, если единицы измерения разнообразны или данные поступают из внешних источников.
Алгоритм действий:
- Выделите исходный диапазон и нажмите Данные → Из таблицы/диапазона (Excel автоматически откроет Power Query).
- В редакторе выделите столбец с данными, перейдите на вкладку Преобразовать → Заменить значения → Дополнительные параметры → Регулярное выражение.
- В поле Найти введите
[^\d.,-](удалит всё, кроме цифр, точек, запятых и минусов). Поле Заменить на оставьте пустым.
Для дробных чисел с запятой как разделителем используйте [^\d,-]. После применения замены нажмите Закрыть и загрузить — данные вернутся в Excel уже в числовом формате.
Преимущества Power Query:
- 🔄 Обработка больших объёмов данных без замедления.
- 🔄 Возможность сохранять шаги трансформации для повторного использования.
- 🔄 Поддержка сложных регулярных выражений (например, для чисел в формате 1 000 000 руб).
⚠️ Внимание: Если в данных используются неразрывные пробелы (например, 100 кг), стандартный пробел в регулярном выражении их не найдёт. Используйте\sили[^\S]для захвата всех типов пробелов.
Удалить лишние пробелы (ПОДСТАВИТЬ или TRIM)
Проверить единообразие разделителей (точка/запятая)
Убедиться, что все числа положительные (или учесть знак "-")
Сохранить оригинальные данные на отдельном листе-->
4. VBA-макросы для автоматизации
Если вам регулярно приходится очищать данные от единиц измерения, стоит написать простой макрос. Ниже приведён код, который удаляет все нечисловые символы из выделенного диапазона и преобразует результат в числа:
Sub CleanNumbers()
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)) Or Mid(cell.Value, i, 1) = "." Or Mid(cell.Value, i, 1) = "," Or Mid(cell.Value, i, 1) = "-" Then
output = output & Mid(cell.Value, i, 1)
End If
Next i
cell.Value = Val(output)
Next cell
End Sub
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (Insert → Module).
- Выделите диапазон с данными и запустите макрос через
Alt + F8.
Макрос сохраняет знаки "-" (для отрицательных чисел), "," и "." (для дробных значений), удаляя всё остальное. Для адаптации под конкретные данные измените строку с условием If IsNumeric....
Предупреждение: макросы могут конфликтовать с защищёнными листами или книгами с ограниченными правами. Перед запуском сохраните файл в формате .xlsm (с поддержкой макросов).
5. Специальные случаи: числа с пробелами и валютами
Особую сложность представляют данные, где числа отделены от единиц измерения неразрывными пробелами (например, 100 кг) или содержат валютные символы ($100, 100€). Здесь стандартные функции могут не сработать.
Решения для неразрывных пробелов:
- 🔹 Используйте
ПОДСТАВИТЬс символомCHAR(160)(код неразрывного пробела):=ПОДСТАВИТЬ(A1; CHAR(160); " "). - 🔹 В Power Query замените
\u00A0(Unicode неразрывного пробела) на обычный пробел.
Для валютных символов подойдёт комбинация функций:
=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; "$"; ""); "€"; ""); "¥"; ""))
Если валюта указана после числа (100 руб), используйте ЛЕВСИМВ с динамической длиной:
=ЗНАЧЕН(ЛЕВСИМВ(A1; ПОИСК(" "; A1) - 1))
| Исходные данные | Формула | Результат |
|---|---|---|
| 100 кг | =ЗНАЧЕН(ПОДСТАВИТЬ(A1; CHAR(160); "")) | 100 |
| $15.99 | =ЗНАЧЕН(ПОДСТАВИТЬ(A1; "$"; "")) | 15.99 |
| 200 м² | =ЛЕВСИМВ(A1; ПОИСК(" "; A1)-1) | 200 |
| 5,000.50€ | =--ПОДСТАВИТЬ(A1; "€"; "") | 5000.5 |
6. Продвинутые техники: пользовательские функции и Power Pivot
Для пользователей, работающих с Power Pivot или DAX, доступны дополнительные инструменты. Например, в Power Pivot можно создать вычисляемый столбец с формулой:
=VALUE(LEFT([Column1]; FIND(" "; [Column1]; 1) - 1))
Эта формула аналогична ЛЕВСИМВ в стандартном Excel, но работает в модели данных.
Если вам часто приходится очищать данные от единиц измерения, имеет смысл создать пользовательскую функцию (UDF) на VBA. Пример функции, которая извлекает первое число из строки (включая дробные значения):
Function ExtractNumber(rng As Range) As Double
Dim str As String
Dim i As Integer
Dim 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
ExtractNumber = Val(numStr)
Else
ExtractNumber = 0
End If
End Function
Теперь в Excel можно использовать =ExtractNumber(A1), и функция вернёт первое число из ячейки, игнорируя весь текст. Это удобно для обработки сложных строк вроде "Вес: 15.5 кг, объём: 2.3 л".
FAQ: Частые вопросы по очистке чисел в Excel
Как удалить единицы измерения, если они стоят ПЕРЕД числом (например, "Цена: $100")?
Используйте комбинацию ПРАВСИМВ и ПОИСК:
=ЗНАЧЕН(ПРАВСИМВ(A1; ДЛСТР(A1) - ПОИСК(":"; A1)))
Для случаев без двоеточия (например, "$100") подойдёт:
=ЗНАЧЕН(ПОДСТАВИТЬ(A1; "$"; ""))
Почему после извлечения числа формулой результат отображается как дата (например, 15-мая вместо 15)?
Excel автоматически преобразует некоторые числа в даты. Чтобы этого избежать:
- Отформатируйте ячейку с результатом как Текстовый формат перед вводом формулы.
- Используйте апостроф перед числом:
="'" & ПСТР(...). - Или принудительно преобразуйте в текст:
=ТЕКСТ(ЗНАЧЕН(ПСТР(...)); "0").
Как обработать данные, где числа и единицы разделены запятой (например, "15,5 кг")?
Замените запятую на точку перед преобразованием:
=ЗНАЧЕН(ПОДСТАВИТЬ(ЛЕВСИМВ(A1; ПОИСК(" "; A1)-1); ","; "."))
Или используйте Power Query с заменой [,] на [.] в регулярном выражении.
Можно ли автоматически определить единицы измерения в столбце и удалить их?
Да, но это требует VBA или Power Query. Пример макроса для анализа первых 100 ячеек столбца и удаления повторяющихся нечисловых символов:
Dim units As Collection
Set units = New Collection Dim cell As Range Dim i As Integer Dim unitPattern As String For Each cell In Range("A1:A100") For i = 1 To Len(cell.Value) If Not IsNumeric(Mid(cell.Value, i, 1)) And Mid(cell.Value, i, 1) <> "." And Mid(cell.Value, i, 1) <> "," Then On Error Resume Next units.Add Mid(cell.Value, i, 1), CStr(Mid(cell.Value, i, 1)) On Error GoTo 0 End If Next i Next cell unitPattern = "" For i = 1 To units.Count unitPattern = unitPattern & units(i) Next i Range("B1:B100").Formula = "=SUBSTITUTE(A1;""" & unitPattern & """;"""")"Код VBA для автоматического определения единиц
Этот код собирает все нечисловые символы из первых 100 ячеек столбца A, а затем удаляет их в столбце B. Для реальных данных потребуется доработка (например, учёт пробелов или многобуквенных единиц типа "кг").
Как сохранить оригинальные единицы измерения в отдельном столбце?
Используйте ПРАВСИМВ или ПСТР для извлечения текста после числа:
=ПРАВСИМВ(A1; ДЛСТР(A1) - ПОИСК(" "; A1)) ' для "15 кг" вернёт "кг"
=ПСТР(A1; ПОИСК(" "; A1) + 1; ДЛСТР(A1)) ' альтернативный вариант
Для случаев без пробела (например, 100г) используйте:
=ПРАВСИМВ(A1; ДЛСТР(A1) - МАКС(ЕСЛИОШИБКА(ПОИСКПОЗ({0;1;2;3;4;5;6;7;8;9}; A1); 0)))
Примечание: последняя формула должна вводиться как формула массива (Ctrl+Shift+Enter в Excel 2019 и старше).