Работа с данными в Microsoft Excel часто требует предварительной очистки информации. Одна из самых распространённых задач — извлечение чисел из ячеек, содержащих смешанный текст: цены с валютами ("1500 руб."), телефонные номера ("+7(912)345-67-89"), идентификаторы ("ID-2023-04567") или технические параметры ("250мм x 150мм x 50мм"). Вручную редактировать сотни строк — неэффективно, поэтому важно знать автоматизированные методы.
Эта статья охватывает 7 проверенных способов, как оставить только цифры в Excel — от базовых функций для новичков до продвинутых макросов для опытных пользователей. Мы разберём:
- 🔹 Формулы с использованием
ПОИСК,ПСТРи регулярных выражений (для новых версий Excel). - 🔹 Надстройки типа Power Query для обработки больших массивов данных.
- 🔹 Макросы VBA, которые ускоряют работу в 10 раз.
- 🔹 Ручные методы для единичных правок.
Особое внимание уделим скрытым ловушкам: почему после очистки числа могут отображаться как текст, как избежать ошибок при работе с отрицательными значениями и дробями, а также как сохранить ведущие нули (например, в артикулах "0012345").
1. Способ: Формулы для извлечения цифр (без VBA)
Если вам нужно один раз очистить данные и не хочется возиться с макросами, формулы — самый надёжный вариант. Они работают во всех версиях Excel (включая Excel 2010 и новее) и не требуют дополнительных надстроек.
Базовая логика: комбинируем функции ПОИСК (или НАЙТИ), ПСТР и ДЛСТР, чтобы последовательно извлекать цифры из строки. Например, для ячейки A1 с текстом "Артикул: 123-45-AB" формула будет такой:
=--ТЕКСТСОЕДИНИТЬ(ЕСЛИОШИБКА(ПСТР($A1;НАЙТИ(СТРОКА(0;1;...;9);$A1;МИН(ЕСЛИ(НАЙТИ(СТРОКА(0;1;...;9);$A1)<>0;НАЙТИ(СТРОКА(0;1;...;9);$A1))));1);"");"")
Но эту формулу сложно воспроизвести вручную. Вместо неё используйте упрощённый вариант для чисел без разделителей (точек, запятых):
=ЗНАЧЕН(СУММПРОИЗВ(--ПСТР(A1;СТРОКА(ДВССЫЛ("1:100"));1)))
⚠️ Внимание: Формула выше вернёт сумму всех цифр в ячейке, а не их последовательность. Например, для "A12B34" результат будет 10 (1+2+3+4), а не 1234. Для корректного извлечения используйте метод из следующего раздела.
Для извлечения точной последовательности цифр (включая ведущие нули) подходит формула массива (вводится через Ctrl+Shift+Enter в старых версиях Excel):
=ТЕКСТСОЕДИНИТЬ(ЕСЛИОШИБКА(ПСТР(A1;МАЛЕНЬКИЙ(ЕСЛИ(ЗНАЧЕН(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))<>0;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))));СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))));1);"");"")
Эта формула работает даже с такими строками, как "+7 (912) 345-67-89", возвращая "79123456789".
☑️ Подготовка к использованию формул
2. Способ: Power Query (для Excel 2016 и новее)
Power Query — это встроенная надстройка в Excel 2016+ и Office 365, которая позволяет очищать данные визуально, без формул. Она идеальна для обработки больших таблиц (тысячи строк) и поддерживает регулярные выражения.
Пошаговая инструкция:
- Выделите диапазон с данными → перейдите на вкладку
Данные→Из таблицы/диапазона(илиGet Data → From Table/Rangeв английской версии). - В открывшемся редакторе Power Query выберите колонку →
Преобразовать→Заменить значения. - В поле "Найти" введите регулярное выражение
[^0-9](удаляет всё, кроме цифр). - Оставьте поле "Заменить на" пустым → нажмите
ОК. - Нажмите
Закрыть и загрузить, чтобы вернуть очищенные данные в Excel.
Преимущества метода:
- 🔹 Работает с миллионами строк (в отличие от формул).
- 🔹 Сохраняет ведущие нули (например, "0012345" останется "0012345").
- 🔹 Можно создать шаблон и применять его к новым данным.
⚠️ Внимание: Если после очистки числа отображаются с зелёным треугольником в углу ячейки (ошибка текстового формата), выделите колонку →Главная→Формат ячеек→ выберите "Текстовый" или "Числовой".
Как вернуть исходные данные после Power Query?
Если вы закрыли редактор Power Query без сохранения, исходные данные остаются нетронутыми в Excel. Чтобы отменить изменения, удалите созданную таблицу или вернитесь в Данные → Запросы и соединения и удалите запрос.
3. Способ: Макрос VBA для автоматической очистки
Если вам приходится очищать данные регулярно, стоит один раз написать макрос. Он сэкономит часы работы. Ниже приведён код, который удаляет все символы, кроме цифр, в выделенном диапазоне:
Sub ОставитьТолькоЦифры()
Dim rng As Range
Dim cell As Range
Dim output As String
Dim i As Integer
' Выделенный диапазон
Set rng = Selection
' Отключаем обновление экрана для ускорения
Application.ScreenUpdating = False
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.Value = output
Next cell
Application.ScreenUpdating = True
MsgBox "Очистка завершена! Обработано " & rng.Count & " ячеек.", vbInformation
End Sub
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код выше в новый модуль (
Insert → Module). - Вернитесь в Excel, выделите диапазон с данными → запустите макрос через
Alt + F8→ выберите "ОставитьТолькоЦифры" →Выполнить.
Особенности макроса:
- 🔹 Работает с любым количеством ячеек (в отличие от формул).
- 🔹 Сохраняет ведущие нули (если ячейка отформатирована как текст).
- 🔹 Можно модифицировать для удаления конкретных символов (например, только букв или знаков препинания).
4. Способ: Надстройка "Kutools for Excel" (платно, но эффективно)
Если вы часто работаете с очисткой данных, рассмотрите плагин Kutools for Excel. Он добавляет десятки полезных функций, включая инструмент "Remove Characters" (Удалить символы), который за 2 клика удаляет всё, кроме цифр.
Как использовать:
- Установите Kutools (есть бесплатная пробная версия).
- Выделите диапазон → на вкладке
KutoolsвыберитеText → Remove Characters. - В открывшемся окне отметьте "Non-numeric" (нечисловые символы) →
OK.
Преимущества Kutools:
- 🔹 Работает быстрее VBA (оптимизированный код).
- 🔹 Поддерживает пакетную обработку нескольких листов.
- 🔹 Можно сохранять пресеты для повторного использования.
| Метод | Скорость | Сохраняет ведущие нули | Требует навыков | Подходит для больших данных |
|---|---|---|---|---|
| Формулы | Низкая | Да (если формат "Текст") | Средние | Нет |
| Power Query | Высокая | Да | Низкие | Да |
| Макрос VBA | Очень высокая | Да | Высокие | Да |
| Kutools | Высокая | Да | Низкие | Да |
| Ручная правка | Очень низкая | Да | Отсутствуют | Нет |
5. Способ: Ручная очистка (для небольших таблиц)
Если данных мало (до 50 строк), можно обойтись без автоматизации. Вот 3 быстрых приёма:
- 🔹 Найти и заменить: Нажмите
Ctrl + H, в поле "Найти" введите нечисловой символ (например, "руб."), оставьте "Заменить на" пустым →Заменить всё. Повторите для всех ненужных символов. - 🔹 Текст по столбцам: Выделите колонку →
Данные→Текст по столбцам→ выберите "С разделителями" → укажите разделитель (например, пробел или тире) → нажмите "Готово". Цифры окажутся в отдельной колонке. - 🔹 Фlash Fill (Быстрое заполнение): Введите в соседней колонке первый очищенный пример (например, из "123-45" сделайте "12345") → нажмите
Ctrl + E, и Excel автоматически заполнит остальные строки.
Минусы ручного метода:
- 🔸 Ошибки при пропуске символов (например, забыли удалить "$").
- 🔸 Долго для таблиц от 100 строк.
- 🔸 Не сохраняет ведущие нули, если ячейка отформатирована как число.
6. Способ: Регулярные выражения (для Excel 365 и Power Query)
В Excel 365 и Power Query доступны регулярные выражения (regex) — мощный инструмент для работы с текстом. Например, чтобы оставить только цифры в колонке, используйте этот шаблон:
[^0-9]
Где:
[^...— исключает всё, что в скобках.0-9— диапазон цифр от 0 до 9.
Пример применения в Power Query:
- Загрузите данные в Power Query (как в разделе 2).
- Выберите колонку →
Преобразовать→Заменить значения→Дополнительно. - Включите опцию "Использовать регулярные выражения" → в поле "Найти" введите
[^0-9]→ оставьте "Заменить на" пустым.
Для извлечения дробных чисел (например, "3.14 м" → "3.14") используйте regex:
[^0-9.]
⚠️ Внимание: В некоторых локалях Excel использует запятую вместо точки как разделитель дробной части. В этом случае замените.на;в регулярном выражении:[^0-9,].
7. Способ: Очистка через Google Таблицы (если Excel недоступен)
Если у вас нет доступа к Excel, но есть Google Таблицы, воспользуйтесь функцией REGEXREPLACE. Она поддерживает регулярные выражения и работает аналогично Power Query.
Формула для извлечения цифр:
=REGEXREPLACE(A1; "[^0-9]"; "")
Примеры:
- 🔹 Для "+7 (912) 345-67-89" → вернёт "79123456789".
- 🔹 Для "1 000 руб." → вернёт "1000".
- 🔹 Для "Артикул: 0012345" → вернёт "0012345".
Чтобы применить формулу ко всему столбцу, протяните её вниз или используйте ARRAYFORMULA:
=ARRAYFORMULA(IF(A1:A=""; ""; REGEXREPLACE(A1:A; "[^0-9]"; "")))
Преимущества Google Таблиц:
- 🔹 Бесплатны и доступны с любого устройства.
- 🔹 Поддерживают совместную работу в реальном времени.
- 🔹 Можно импортировать данные из Excel и обратно.
FAQ: Частые вопросы по очистке цифр в Excel
❓ Почему после очистки числа отображаются как текст (с зелёным треугольником)?
Это происходит, если Excel интерпретирует содержимое как текст (например, из-за ведущих нулей). Чтобы исправить:
- Выделите ячейки → нажмите
Ctrl + 1(или правая кнопка →Формат ячеек). - Выберите формат "Числовой" или "Общий".
- Если нужно сохранить нули (например, в артикулах), оставьте формат "Текстовый" и игнорируйте предупреждение.
❓ Как очистить числа с разделителями тысяч (например, "1 000 000")?
Используйте формулу с заменой пробелов:
=ЗНАЧЕН(ПОДСТАВИТЬ(A1; " "; ""))
Или в Power Query замените пробелы на пустую строку перед удалением нечисловых символов.
❓ Можно ли очистить цифры, сохраняя знак минус для отрицательных чисел?
Да, модифицируйте регулярное выражение в Power Query или Google Таблицах:
[^0-9-]
Или используйте этот макрос VBA:
Sub ОставитьЦифрыИМинус()
Dim rng As Range, cell As Range, output As String, 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) = "-" Then
output = output & Mid(cell.Value, i, 1)
End If
Next i
cell.Value = output
Next cell
End Sub
❓ Как очистить данные в формате "10 кг", оставив только "10"?
Используйте Power Query с разделением по пробелу:
- Загрузите данные в Power Query.
- Выберите колонку →
Преобразовать→Разделить столбец→По разделителю. - Укажите разделитель "Пробел" → выберите "Левая часть" (чтобы оставить только число).
Или примените формулу:
=ЛЕВСИМВ(A1; НАЙТИ(" "; A1) - 1)
❓ Почему макрос не работает с ячейками, содержащими дроби (например, "3,14 м")?
Стандартный макрос удаляет все нечисловые символы, включая запятую. Чтобы сохранить дробную часть, модифицируйте код:
Sub ОставитьЦифрыИЗапятую()
Dim rng As Range, cell As Range, output As String, 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) = "." Then
output = output & Mid(cell.Value, i, 1)
End If
Next i
cell.Value = output
Next cell
End Sub
Для корректной работы замените в Excel запятую на точку (или наоборот) в зависимости от региональных настроек.