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

Проблема с последними символами: когда это нужно

Работа с данными в Microsoft Excel часто требует очистки текста от лишних символов. Ситуации, когда нужно убрать два последних знака, встречаются чаще, чем кажется: это могут быть артефакты после импорта данных (например, ;RU в конце артикулов), остатки разделителей из CSV-файлов (,""), или даже ошибки вручную введённых номеров телефонов (+7912345678**).

Особенно актуальна задача для бухгалтеров, аналитиков и маркетологов, которые работают с большими массивами данных. Например, при подготовке прайс-листов к загрузке в 1С часто требуется удалить валюту (1000 руб1000) или постфиксы в артикулах. В этой статье разберём все возможные способы — от простых формул до автоматизации через VBA, — чтобы вы могли выбрать оптимальный вариант для своей задачи.

Способ 1: Формула LEFT для удаления двух символов

Самый универсальный и безопасный метод — использование функции LEFT. Она извлекает заданное количество символов с начала строки, что эквивалентно обрезке конца. Формула для удаления двух последних символов:

=LEFT(A1; LEN(A1)-2)

Разберём, как это работает:

  • 🔹 LEN(A1) — определяет общую длину текста в ячейке A1.
  • 🔹 LEN(A1)-2 — вычитает 2 символа из общей длины.
  • 🔹 LEFT — возвращает строку длиной LEN(A1)-2, начиная с первого символа.

Преимущество метода: формула динамически подстраивается под длину текста. Если в ячейке 5 символов, она вернёт 3; если 100 — вернёт 98. Важно: если в ячейке меньше 2 символов, формула вернёт ошибку #ЗНАЧ!. Чтобы избежать этого, оберните её в IFERROR:

=IFERROR(LEFT(A1; LEN(A1)-2); A1)
=IF(RIGHT(A1;2)="_4"; LEFT(A1; LEN(A1)-2); A1)

Это избавит от ошибок в ячейках без постфикса.-->

Способ 2: Функция REPLACE для точечного удаления

Если вам нужно удалить символы строго с конца (например, последние две цифры в коде товара), подойдёт функция REPLACE. Она заменяет часть текста на пустую строку. Синтаксис:

=REPLACE(A1; LEN(A1)-1; 2; "")

Расшифровка аргументов:

  • 📌 A1 — исходная ячейка.
  • 📌 LEN(A1)-1 — позиция, с которой начинается замена (предпоследний символ).
  • 📌 2 — количество заменяемых символов.
  • 📌 "" — пустая строка (удаление).

Когда использовать REPLACE вместо LEFT? Если вам нужно удалить символы условно — например, только когда они равны определённому значению. Комбинация с IF позволяет сделать это гибко:

=IF(RIGHT(A1;2)="руб"; REPLACE(A1; LEN(A1)-1; 2; ""); A1)
📊 Какой способ вам кажется удобнее для удаления символов?
Формула LEFT
Функция REPLACE
Макросы VBA
Инструмент "Текст по столбцам"

Способ 3: Инструмент "Текст по столбцам" (без формул)

Если вы предпочитаете работать без формул, воспользуйтесь встроенным инструментом Текст по столбцам. Он подходит для одноразовой обработки данных и не требует знания функций. Алгоритм:

  1. Выделите диапазон ячеек с данными.
  2. Перейдите на вкладку ДанныеТекст по столбцам.
  3. В мастере импорта выберите С разделителямиДалее.
  4. Снимите все галочки в разделе Разделители (чтобы Excel воспринял текст как единое целое).
  5. Нажмите Готово — данные разобьются по символам в отдельные столбцы.
  6. Удалите два последних столбца (с ненужными символами).
  7. Объедините оставшиеся столбцы обратно с помощью функции CONCATENATE или знака &.

Это единственный способ, который позволяет визуально контролировать процесс удаления перед применением изменений. Минус — он требует ручных действий и не подходит для динамических данных, которые обновляются автоматически.

Сделать резервную копию данных|Убедиться, что в выделенном диапазоне нет объединённых ячеек|Проверить, что справа от данных есть свободные столбцы (Excel перезапишет их)|Отменить автосохранение (на случай ошибки)-->

Способ 4: Макросы VBA для массового удаления

Если вам нужно обработать тысячи строк или повторять операцию регулярно, VBA-макрос сэкономит время. Ниже код, который удаляет два последних символа во всех выделенных ячейках:

Sub DeleteLastTwoChars()

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 Exit Sub

For Each cell In rng

If Len(cell.Value) >= 2 Then

cell.Value = Left(cell.Value, Len(cell.Value) - 2)

End If

Next cell

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Вернитесь в Excel, выделите нужный диапазон и запустите макрос (Alt + F8 → выберите DeleteLastTwoCharsВыполнить).

Преимущества макроса:

  • ⚡ Обрабатывает тысячи ячеек за секунды.
  • ⚡ Работает с данными, которые обновляются (в отличие от "Текста по столбцам").
  • ⚡ Можно модифицировать под другие задачи (например, удалять символы только если они цифры).
Как модифицировать макрос для удаления символов только в ячейках с определённым форматом?

Добавьте проверку формата перед обработкой:

If cell.NumberFormat = "General" Then

cell.Value = Left(cell.Value, Len(cell.Value) - 2)

End If

Это пригодится, если нужно удалять символы только в текстовых ячейках, игнорируя числа или даты.

Способ 5: Power Query для сложных преобразований

Если вы работаете с большими наборами данных (например, импортируете из базы или CSV), Power Query — идеальный инструмент. Он позволяет создавать многоступенчатые преобразования, которые обновляются при изменении исходных данных.

Алгоритм удаления двух последних символов:

  1. Выделите диапазон → ДанныеИз таблицы/диапазона (Excel откроет Power Query).
  2. В редакторе запросов выберите столбец с данными → ПреобразоватьИзвлечьПервые символы.
  3. В поле Число символов введите формулу: =Text.Length([Column1])-2 (замените Column1 на имя вашего столбца).
  4. Нажмите Закрыть и загрузить.

Плюсы Power Query:

  • 📊 Сохраняет историю преобразований (можно откатиться или изменить логику).
  • 📊 Автоматически обновляет данные при изменении источника.
  • 📊 Поддерживает сложные условия (например, удалять символы только если они — буквы).

Ошибки и нюансы: что может пойти не так

Даже в простых операциях с текстом есть подводные камни. Рассмотрим типичные ошибки и как их избежать:

Проблема Причина Решение
Формула возвращает #ЗНАЧ! В ячейке меньше 2 символов Оберните формулу в IFERROR или добавьте проверку IF(LEN(A1)>=2; LEFT(...); A1)
Макрос не работает Включён режим ограниченного доступа к VBA Проверьте настройки безопасности (Файл → Параметры → Центр управления безопасностью)
"Текст по столбцам" портит данные В ячейках есть невидимые символы (табуляции, переносы) Предварительно очистите данные функцией CLEAN или TRIM
Power Query не обновляет данные Не настроено автоматическое обновление Проверьте параметры запроса (Правка → Свойства → Обновить каждые...)

Особый случай: если в ячейках смешаны числа и текст (например, 123abc), формулы могут вести себя непредсказуемо. Используйте приведение типов:

=LEFT(TEXT(A1; "0"); LEN(TEXT(A1; "0"))-2)

Это принудительно преобразует содержимое в текст перед обработкой.

FAQ: Частые вопросы по удалению символов

Можно ли удалить два последних символа только в ячейках, где они — цифры?

Да, используйте комбинацию функций IF, ISNUMBER и VALUE:

=IF(ISNUMBER(VALUE(RIGHT(A1;2))); LEFT(A1; LEN(A1)-2); A1)

Эта формула проверит, являются ли последние два символа числом, и удалит их только в этом случае.

Как удалить два символа с конца в Google Таблицах?

В Google Sheets работают те же формулы, что и в Excel, но с английским синтаксисом:

=LEFT(A1; LEN(A1)-2)

Для массового изменения без формул используйте Найти и заменить с регулярными выражениями: найдите ..$, замените на пустую строку.

Почему после удаления символов числа превращаются в текст?

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

=VALUE(LEFT(A1; LEN(A1)-2))

Или примените формат ячеек Числовой после обработки.

Как удалить два последних символа в диапазоне без потери форматирования?

Используйте макрос с сохранением формата:

Sub DeleteLastTwoCharsKeepFormat()

Dim rng As Range, cell As Range

Dim fmt As Long, clr As Long

Set rng = Selection

For Each cell In rng

If Len(cell.Value) >= 2 Then

fmt = cell.NumberFormat

clr = cell.Interior.Color

cell.Value = Left(cell.Value, Len(cell.Value) - 2)

cell.NumberFormat = fmt

cell.Interior.Color = clr

End If

Next

End Sub

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

Да, модифицируйте макрос для проверки цвета:

If cell.Interior.Color = RGB(255, 0, 0) Then ' Красный цвет

cell.Value = Left(cell.Value, Len(cell.Value) - 2)

End If

Замените RGB(255, 0, 0) на нужный цвет.