Проблема с последними символами: когда это нужно
Работа с данными в 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)
Способ 3: Инструмент "Текст по столбцам" (без формул)
Если вы предпочитаете работать без формул, воспользуйтесь встроенным инструментом Текст по столбцам. Он подходит для одноразовой обработки данных и не требует знания функций. Алгоритм:
- Выделите диапазон ячеек с данными.
- Перейдите на вкладку
Данные→Текст по столбцам. - В мастере импорта выберите
С разделителями→Далее. - Снимите все галочки в разделе
Разделители(чтобы Excel воспринял текст как единое целое). - Нажмите
Готово— данные разобьются по символам в отдельные столбцы. - Удалите два последних столбца (с ненужными символами).
- Объедините оставшиеся столбцы обратно с помощью функции
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
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Вернитесь в 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 — идеальный инструмент. Он позволяет создавать многоступенчатые преобразования, которые обновляются при изменении исходных данных.
Алгоритм удаления двух последних символов:
- Выделите диапазон →
Данные→Из таблицы/диапазона(Excel откроет Power Query). - В редакторе запросов выберите столбец с данными →
Преобразовать→Извлечь→Первые символы. - В поле
Число символоввведите формулу:=Text.Length([Column1])-2(заменитеColumn1на имя вашего столбца). - Нажмите
Закрыть и загрузить.
Плюсы 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) на нужный цвет.