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

Дефисы между цифрами в 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 (преобразовано в число)

⚠️ Внимание: Если после применения функции результат отображается как текст (выровнен по левому краю), используйте двойной унарный минус (=--ПОДСТАВИТЬ(...)) или функцию =ЗНАЧЕН() для преобразования в число.

📊 Какой метод удаления дефисов вы используете чаще?
Ручная замена (Ctrl+H)
Функция ПОДСТАВИТЬ
Power Query
VBA-скрипты
Другой способ

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+F11Insert → Module → вставьте код → сохраните. В ячейке введите =RemoveEdgeHyphens(A1).

4. Power Query: обработка больших массивов данных

Если вам нужно очистить дефисы в файле с десятками тысяч строк, ручные методы окажутся неэффективными. Здесь на помощь приходит Power Query (доступен в Excel 2016+ и Microsoft 365). Этот инструмент позволяет создавать многоступенчатые преобразования, которые можно сохранять и повторно применять к новым данным.

Пошаговая инструкция:

  1. Выделите диапазон данных → перейдите в Данные → Из таблицы/диапазона (в старых версиях: Данные → Получение данных → Из таблицы/диапазона).
  2. В открывшемся редакторе Power Query выделите столбец с дефисами → кликните правой кнопкой → выберите Заменить значения.
  3. В поле Значение для поиска введите -, поле Заменить на оставьте пустым → нажмите ОК.
  4. Для преобразования результата в числа выделите столбец → измените тип данных на Целое число или Десятичное число.
  5. Нажмите Закрыть и загрузить, чтобы применить изменения.

Преимущества 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

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

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите диапазон с данными → запустите макрос (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 явно укажите тип данных Целое число.