Replace создаёт строку с заменёнными фрагментами. Для очистки данных часто нужно заменить неразрывный пробел обычным, прежде чем сравнивать названия.

Разберём замену Unicode-символа 160 и удаление внешних обычных пробелов.

Что подготовить

Подготовьте лист «Проверка» с колонками Этап и Текст. В примере строка собирается в коде, поэтому её легко воспроизвести без копирования невидимых символов с сайта.

ChrW(160) задаёт неразрывный пробел. Внешние пробелы добавлены отдельно, чтобы показать границы действия Trim$.

Код и порядок выполнения

Option Explicit
Sub NormalizeSpaces()
    Dim s As String, cleaned As String
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Проверка")
    s = "  Цена" & ChrW(160) & "товара  "
    cleaned = Replace(s, ChrW(160), " ")
    cleaned = Trim$(cleaned)
    ws.Range("A2").Value = "Исходный текст"
    ws.Range("B2").Value = s
    ws.Range("A3").Value = "После очистки"
    ws.Range("B3").Value = cleaned
End Sub

Replace получает исходный текст, искомый фрагмент и замену. Новая строка присваивается cleaned: вызов сам по себе не изменяет переменную s.

После замены Trim$ удаляет обычные пробелы слева и справа. Он не сжимает любые последовательности внутренних пробелов и не удаляет все разновидности Unicode-пробелов.

Учебный код: Replace в VBA: замена текста и неразрывного пробела.
Учебный код: Replace в VBA: замена текста и неразрывного пробела.

Как проверить результат

После очистки B3 содержит «Цена товара» с одним обычным пробелом между словами и без внешних пробелов.
После очистки B3 содержит «Цена товара» с одним обычным пробелом между словами и без внешних пробелов.

После очистки B3 содержит «Цена товара» с одним обычным пробелом между словами и без внешних пробелов.

Ограничения и частые ошибки

Не удаляйте все пробелы без правила: «Отдел продаж» и «Отделпродаж» — разные значения. Нормализация должна сохранять смысл текста и исходник для сравнения.

Для замены слов с учётом регистра задайте compare явно. Replace меняет вхождения внутри строки, а не только отдельные слова; замена короткого фрагмента может затронуть часть другого названия.

Перед записью в исходный столбец сначала выведите результат рядом и сравните несколько строк. Невидимые символы удобнее проверять по Len и кодам отдельных знаков, а не только по внешнему виду.

Проверка перед рабочим запуском

  • ChrW(160) заменён обычным пробелом.
  • Краевые пробелы удалены.
  • Исходная строка сохранена отдельно.
  • Внутренние слова не склеены.

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

Продолжить изучение: InStr в VBA: поиск подстроки и проверка результата, Len, Chr и Asc в VBA: длина и коды символов, Прайс-лист с макросом: заполнение цены по артикулу.

Разберитесь с макросами вместе с преподавателем

На занятии вы записываете действия, читаете код и проверяете результат на небольшом примере. Преподаватель подберёт задания под ваш уровень и поможет понять связь между командами VBA и изменениями в книге.

Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.

Записаться на бесплатный урок