Дефисы между цифрами в Microsoft Excel — распространённая проблема, с которой сталкиваются пользователи при импорте данных из внешних источников. Чаще всего это происходит при работе с телефонными номерами (8-912-345-67-89), серийными номерами оборудования (SN-2023-0456-AB) или датами в нестандартном формате (2023-12-31). В большинстве случаев такие дефисы мешают корректной обработке данных: формулы не распознают числа, сортировка работает неправильно, а построение графиков становится невозможным.
В этой статье мы разберём 5 способов удаления дефисов — от элементарной ручной замены до автоматизированных решений с использованием Power Query и VBA. Особое внимание уделим нюансам, которые возникают при работе с большими массивами данных (10 000+ строк) и специфическими форматами (например, когда дефисы являются разделителями тысяч). Все методы протестированы на Excel 2016–2023 и Microsoft 365, с учётом особенностей каждой версии.
1. Быстрая замена через «Найти и заменить»
Самый простой способ убрать дефисы — использовать встроенную функцию Найти и заменить (Ctrl+H). Этот метод подходит для одноразовых правок и небольших таблиц (до 1 000 строк). Его главное преимущество — скорость: операция занимает меньше минуты даже у новичков.
Алгоритм действий:
- 📌 Выделите диапазон ячеек с данными (или нажмите
Ctrl+A, чтобы выбрать весь лист). - 🔍 Нажмите
Ctrl+Hили перейдите вГлавная → Найти и выделить → Заменить. - 📝 В поле
Найти:введите-(дефис), в полеЗаменить на:оставьте пустым. - 🔄 Нажмите
Заменить всёи подтвердите действие.
⚠️ Внимание: Если в ваших данных есть полезные дефисы (например, в артикулах товаров типа AB-123-XY), этот метод удалит их все без разбора. В таких случаях лучше использовать частичную замену (см. раздел 3) или формулы.
2. Использование функции ПОДСТАВИТЬ для избирательного удаления
Когда дефисы нужно убрать только в определённых столбцах или по условию, на помощь приходит функция =ПОДСТАВИТЬ(). Она позволяет заменить один символ на другой (или на ничего) с сохранением оригинальных данных. Формула работает даже в Excel Online и Google Sheets.
Синтаксис:
=ПОДСТАВИТЬ(исходный_текст; "-"; "")
Примеры применения:
- 📊 Для ячейки
A1с номером123-45-67формула вернёт1234567. - 🔄 Чтобы применить ко всему столбцу, протяните формулу вниз или используйте
=ПОДСТАВИТЬ(A:A; "-"; "")(в новых версиях Excel). - 🔍 Для удаления только первых двух дефисов в номере телефона:
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; "-"; ""; 1); "-"; ""; 1).
| Исходные данные (A1) | Формула | Результат |
|---|---|---|
8-912-345-67-89 |
=ПОДСТАВИТЬ(A1; "-"; "") |
89123456789 |
SN-2023-0456 |
=ПОДСТАВИТЬ(A1; "-"; ""; 1) |
SN2023-0456 (удален только первый дефис) |
12-345-678 |
=--ПОДСТАВИТЬ(A1; "-"; "") |
12345678 (преобразовано в число) |
⚠️ Внимание: Если после применения функции результат отображается как текст (выровнен по левому краю), используйте двойной унарный минус (=--ПОДСТАВИТЬ(...)) или функцию =ЗНАЧЕН() для преобразования в число.
3. Частичная замена: как убрать дефисы только в начале/конце
Иногда дефисы являются частью формата, и удалять их все нецелесообразно. Например, в артикулах типа -AB123-CD- может потребоваться оставить внутренние дефисы, но убрать крайние. Для этого комбинируют функции ПОДСТАВИТЬ, ЛЕВСИМВ и ПРАВСИМВ.
Примеры формул:
- 🔹 Убрать дефис в начале строки:
=ЕСЛИ(ЛЕВСИМВ(A1)="-"; ПРАВСИМВ(A1; ДЛСТР(A1)-1); A1) - 🔹 Убрать дефис в конце строки:
=ЕСЛИ(ПРАВСИМВ(A1)="-"; ЛЕВСИМВ(A1; ДЛСТР(A1)-1); A1) - 🔹 Убрать первый и последний дефисы:
=ПОДСТАВИТЬ(ЕСЛИ(ПРАВСИМВ(A1)="-"; ЛЕВСИМВ(A1; ДЛСТР(A1)-1); A1); "-"; ""; 1)
Для автоматизации процесса можно создать пользовательскую функцию на VBA:
Код VBA для избирательного удаления дефисов
Function RemoveEdgeHyphens(rng As Range) As String
Dim str As String
str = rng.Value
If Left(str, 1) = "-" Then str = Mid(str, 2)
If Right(str, 1) = "-" Then str = Left(str, Len(str) - 1)
RemoveEdgeHyphens = str
End Function
Чтобы использовать: нажмите Alt+F11 → Insert → Module → вставьте код → сохраните. В ячейке введите =RemoveEdgeHyphens(A1).
4. Power Query: обработка больших массивов данных
Если вам нужно очистить дефисы в файле с десятками тысяч строк, ручные методы окажутся неэффективными. Здесь на помощь приходит Power Query (доступен в Excel 2016+ и Microsoft 365). Этот инструмент позволяет создавать многоступенчатые преобразования, которые можно сохранять и повторно применять к новым данным.
Пошаговая инструкция:
- Выделите диапазон данных → перейдите в
Данные → Из таблицы/диапазона(в старых версиях:Данные → Получение данных → Из таблицы/диапазона). - В открывшемся редакторе Power Query выделите столбец с дефисами → кликните правой кнопкой → выберите
Заменить значения. - В поле
Значение для поискавведите-, полеЗаменить наоставьте пустым → нажмитеОК. - Для преобразования результата в числа выделите столбец → измените тип данных на
Целое числоилиДесятичное число. - Нажмите
Закрыть и загрузить, чтобы применить изменения.
Преимущества Power Query:
- 🔄 Не разрушает исходные данные — все изменения сохраняются в отдельной таблице.
- 📊 Поддерживает многоэтапную обработку (например, сначала убрать дефисы, затем разделить столбец, потом отфильтровать значения).
- 🔗 Можно автоматизировать обновление при изменении исходных данных.
Выделить исходный диапазон|Проверить на наличие объединённых ячеек|Удалить пустые строки/столбцы|Сохранить резервную копию файла
-->
5. VBA-скрипты для автоматизации повторяющихся задач
Если вам регулярно приходится очищать дефисы в однотипных файлах, имеет смысл написать VBA-макрос. Например, следующий скрипт удаляет все дефисы в выделенном диапазоне и преобразует результаты в числа:
Sub RemoveHyphensAndConvertToNumber()
Dim rng As Range
Dim cell As Range
On Error Resume Next
Set rng = Selection.SpecialCells(xlCellTypeConstants, xlTextValues)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Выделите ячейки с текстом!", vbExclamation
Exit Sub
End If
Application.ScreenUpdating = False
For Each cell In rng
cell.Value = Replace(cell.Value, "-", "")
cell.NumberFormat = "General"
Next cell
Application.ScreenUpdating = True
MsgBox "Дефисы удалены и данные преобразованы в числа.", vbInformation
End Sub
Как использовать:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Выделите диапазон с данными → запустите макрос (
F5или черезМакросыв менюРазработчик).
⚠️ Внимание: Перед запуском макроса сохраните файл в формате .xlsm (с поддержкой макросов), иначе код не сохранится. Также отключите защиту от макросов в Файл → Параметры → Центр управления безопасностью, если скрипт не запускается.
6. Типичные ошибки и как их избежать
При удалении дефисов пользователи часто сталкиваются с неожиданными проблемами. Вот самые распространённые из них и способы их решения:
| Проблема | Причина | Решение |
|---|---|---|
| После замены числа отображаются как текст (с зелёным треугольником) | Excel не распознаёт результат как числовой формат | Используйте =ЗНАЧЕН(ПОДСТАВИТЬ(A1; "-"; "")) или двойной унарный минус (=--ПОДСТАВИТЬ(...)) |
Функция ПОДСТАВИТЬ не работает с датами (2023-12-31) |
Excel хранит даты как числа, а дефисы — часть формата отображения | Измените формат ячейки на Дата или используйте =ДАТАЗНАЧ(ПОДСТАВИТЬ(A1; "-"; ".")) |
| Макрос удаляет дефисы во всём файле, а не только в выделенном диапазоне | В коде не указан конкретный диапазон | Замените Selection на Range("A1:A100") или другой адрес |
| Power Query "зависает" при обработке больших файлов | Недостаточно оперативной памяти или сложные преобразования | Разбейте задачу на этапы или используйте 64-разрядную версию Excel |
Ещё одна распространённая ошибка — потеря ведущих нулей после удаления дефисов (например, 00-123 превращается в 123). Чтобы этого избежать:
- 🔢 Предварительно измените формат ячейки на
Текстовый. - 📌 Используйте апостроф перед числом:
'00123. - 🔄 В Power Query добавьте шаг преобразования в текст:
= Table.TransformColumns(#"Предыдущий шаг", {{"Столбец", each Text.PadStart(Text.Replace(_, "-", ""), 5, "0")}})(где5— желаемая длина строки).
FAQ: Частые вопросы по удалению дефисов в Excel
Можно ли убрать дефисы только в определённых ячейках по условию (например, если число больше 1000)?
Да, используйте формулу с ЕСЛИ:
=ЕСЛИ(A1>1000; ПОДСТАВИТЬ(A1; "-"; ""); A1)
Для диапазона примените условное форматирование или Power Query с фильтрацией.
После удаления дефисов числа отображаются в экспоненциальном формате (например, 1.23E+10). Как исправить?
Это происходит с очень большими числами (более 11 знаков). Решения:
- 📌 Измените формат ячейки на
Текстовый. - 🔢 Используйте функцию
=ТЕКСТ(ПОДСТАВИТЬ(A1; "-"; ""); "0"). - 🔄 В Power Query преобразовывайте столбец в текст, а не в число.
Как убрать дефисы в датах, чтобы Excel распознавал их как даты, а не текст?
Используйте комбинацию функций:
=ДАТАЗНАЧ(ПОДСТАВИТЬ(A1; "-"; "."))
Или в Power Query примените преобразование типа Date после замены дефисов на точки.
Можно ли автоматизировать удаление дефисов при открытии файла?
Да, с помощью VBA. Создайте макрос в событии Workbook_Open:
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
On Error Resume Next
ws.Range("A:Z").Replace "-", ""
Next ws
End Sub
⚠️ Внимание: Такой макрос будет работать при каждом открытии файла — используйте его только для шаблонов!
Почему после удаления дефисов числа не сортируются правильно (например, 100 идёт перед 99)?
Это признак того, что данные остались в текстовом формате. Решения:
- 🔢 Примените формат
ОбщийилиЧисловой. - 📊 Используйте функцию
=ЗНАЧЕН(). - 🔄 В Power Query явно укажите тип данных
Целое число.