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

Работа с данными в 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; "кг"; ""); "г"; ""); " "; "")

Здесь двойной минус (--) преобразует текст в число, а вложенные ПОДСТАВИТЬ убирают "кг", "г" и пробелы.

Преимущество метода — простота и наглядность. Недостаток — нужно заранее знать все возможные единицы измерения в данных. Если в столбце встречаются кг, грамм и тонны, формула усложнится.

📊 Какой метод вы чаще используете для очистки данных в Excel?
Ручной ввод
Текстовые функции (ЛЕВСИМВ, ПСТР)
Power Query
Макросы VBA
Другой

3. Регулярные выражения через Power Query (Excel 2016+)

Power Query (вкладка ДанныеПолучить данные) — мощный инструмент для трансформации данных, поддерживающий регулярные выражения. Это идеальное решение, если единицы измерения разнообразны или данные поступают из внешних источников.

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

  1. Выделите исходный диапазон и нажмите ДанныеИз таблицы/диапазона (Excel автоматически откроет Power Query).
  2. В редакторе выделите столбец с данными, перейдите на вкладку ПреобразоватьЗаменить значенияДополнительные параметрыРегулярное выражение.
  3. В поле Найти введите [^\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

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (InsertModule).
  3. Выделите диапазон с данными и запустите макрос через 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 автоматически преобразует некоторые числа в даты. Чтобы этого избежать:

  1. Отформатируйте ячейку с результатом как Текстовый формат перед вводом формулы.
  2. Используйте апостроф перед числом: ="'" & ПСТР(...).
  3. Или принудительно преобразуйте в текст: =ТЕКСТ(ЗНАЧЕН(ПСТР(...)); "0").
Как обработать данные, где числа и единицы разделены запятой (например, "15,5 кг")?

Замените запятую на точку перед преобразованием:

=ЗНАЧЕН(ПОДСТАВИТЬ(ЛЕВСИМВ(A1; ПОИСК(" "; A1)-1); ","; "."))

Или используйте Power Query с заменой [,] на [.] в регулярном выражении.

Можно ли автоматически определить единицы измерения в столбце и удалить их?

Да, но это требует VBA или Power Query. Пример макроса для анализа первых 100 ячеек столбца и удаления повторяющихся нечисловых символов:

Код VBA для автоматического определения единиц

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 & """;"""")"

Этот код собирает все нечисловые символы из первых 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 и старше).