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 SubReplace получает исходный текст, искомый фрагмент и замену. Новая строка присваивается cleaned: вызов сам по себе не изменяет переменную s.
После замены Trim$ удаляет обычные пробелы слева и справа. Он не сжимает любые последовательности внутренних пробелов и не удаляет все разновидности Unicode-пробелов.
Как проверить результат
После очистки B3 содержит «Цена товара» с одним обычным пробелом между словами и без внешних пробелов.
Ограничения и частые ошибки
Не удаляйте все пробелы без правила: «Отдел продаж» и «Отделпродаж» — разные значения. Нормализация должна сохранять смысл текста и исходник для сравнения.
Для замены слов с учётом регистра задайте compare явно. Replace меняет вхождения внутри строки, а не только отдельные слова; замена короткого фрагмента может затронуть часть другого названия.
Перед записью в исходный столбец сначала выведите результат рядом и сравните несколько строк. Невидимые символы удобнее проверять по Len и кодам отдельных знаков, а не только по внешнему виду.
Проверка перед рабочим запуском
- ChrW(160) заменён обычным пробелом.
- Краевые пробелы удалены.
- Исходная строка сохранена отдельно.
- Внутренние слова не склеены.
Сначала выполните пример на учебной копии с указанными именами листов и диапазонами. Сравните исходные данные и результат, затем сохраните проверенный вариант процедуры.
Продолжить изучение: InStr в VBA: поиск подстроки и проверка результата, Len, Chr и Asc в VBA: длина и коды символов, Прайс-лист с макросом: заполнение цены по артикулу.
Разберитесь с макросами вместе с преподавателем
На занятии вы записываете действия, читаете код и проверяете результат на небольшом примере. Преподаватель подберёт задания под ваш уровень и поможет понять связь между командами VBA и изменениями в книге.
Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.
Оставить комментарий
Есть вопрос по статье? Напишите комментарий — будем рады обсудить.
Комментарии