Задача
Типичный сценарий: есть выгрузка каталога, в столбце A названия категорий или товаров на русском, нужно получить столбец с готовыми адресами. Требования те же, что и всегда: нижний регистр, латиница по таблице Яндекса, дефис вместо пробелов, никаких лишних символов.
Способ 1. Формула ПОДСТАВИТЬ
Самый прямолинейный вариант: вложенные замены по одной букве. Работает в любой версии Excel, но формула получается длинной — 33 вложения.
=НИЖНИЙ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;"а";"a");"б";"b");"в";"v"))
На практике формулу не пишут в одну строку, а разбивают на этапы в соседних столбцах: в первом приводят текст к нижнему регистру и убирают лишние символы, во втором заменяют буквы, в третьем схлопывают дефисы. После обработки столбцы скрывают или копируют результат как значения.
Плюс: не требует макросов, файл остаётся обычной книгой. Минус: формула нечитаемая, ошибку в ней почти невозможно найти.
Способ 2. Google Таблицы и REGEXREPLACE
В Google Таблицах есть регулярные выражения, поэтому финальная очистка делается одной функцией. Замену букв всё равно приходится описывать, но чистка адреса становится короткой.
=REGEXREPLACE(REGEXREPLACE(НИЖНИЙ(B2); "[^a-z0-9]+"; "-"); "^-+|-+$"; "")
Здесь B2 — столбец, где буквы уже заменены на латиницу. Первая функция превращает все посторонние символы в дефисы и схлопывает их, вторая срезает дефисы по краям.
Частая ошибка в таблицах. Функция ПОДСТАВИТЬ учитывает регистр, поэтому «Щука» и «щука» обрабатываются по-разному. Приводите текст к нижнему регистру до замены букв, а не после.
Способ 3. Макрос на VBA
Если такая задача возникает регулярно, разумнее один раз написать пользовательскую функцию. Логика простая: словарь замен, проход по символам, финальная очистка.
Function Translit(s As String) As String
Dim ru, en, i As Integer, r As String
ru = Array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я")
en = Array("a","b","v","g","d","e","e","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","h","c","ch","sh","shh","","y","","e","yu","ya")
r = LCase(s)
For i = 0 To UBound(ru)
r = Replace(r, ru(i), en(i))
Next i
Translit = r
End Function
Функция вызывается как обычная: =Translit(A2). После неё остаётся заменить пробелы и знаки препинания на дефисы — это можно дописать в тот же макрос.
Минус способа: файл придётся сохранять с поддержкой макросов, а получатель выгрузки может их отключить.
Сравнение способов
| Способ | Подготовка | Риск ошибки | Когда подходит |
|---|---|---|---|
| Формула ПОДСТАВИТЬ | Долгая | Высокий | Разовая задача без макросов |
| REGEXREPLACE | Средняя | Средний | Работа в Google Таблицах |
| Макрос VBA | Один раз | Низкий | Регулярные выгрузки |
| Пакетный режим генератора | Нет | Нет | Почти всегда |
Самый короткий путь
Если задача разовая или список умещается в несколько сотен строк, формулы не нужны совсем:
- Выделите столбец с названиями и скопируйте его.
- Откройте генератор, переключитесь в режим «Список строк» и вставьте.
- Скопируйте готовые адреса кнопкой «Копировать все» или скачайте файлом.
- Вставьте обратно в соседний столбец таблицы — порядок строк сохраняется.
Пустые строки пропускаются, поэтому если в исходном списке есть разрывы, проверьте соответствие строк перед вставкой обратно.
Что проверить после обработки
- Дубли. Отсортируйте столбец с адресами и найдите повторы: разные названия могли схлопнуться в один адрес.
- Длину. Формулой
=ДЛСТР(B2)найдите строки длиннее 60 символов — их стоит сократить, о чём подробно в статье про длину URL. - Пустые значения. Строки, где после обработки не осталось ничего, обычно состояли только из цифр и знаков.
- Спорные буквы. Поиском проверьте, нет ли в результате сочетаний
shch,kh,ts— это признак чужой таблицы.
Power Query для регулярных выгрузок
Если каталог обновляется еженедельно, формулы и макросы неудобны: их приходится протягивать на новые строки. Power Query позволяет описать преобразование один раз и потом обновлять результат одной кнопкой.
Порядок такой: загрузите таблицу в редактор запросов, добавьте настраиваемый столбец с функцией Text.Lower, затем цепочку Text.Replace по таблице соответствий, и в конце — замену посторонних символов. Запрос сохраняется вместе с книгой и применяется к любому новому файлу той же структуры.
Готовый порядок работы с выгрузкой каталога
- Столбец A — исходное название категории или товара.
- Столбец B — очищенное название: убраны артикулы, единицы измерения, служебные пометки.
- Столбец C — транслитерация столбца B.
- Столбец D — длина адреса формулой
=ДЛСТР(C2)для контроля. - Столбец E — пометка о дубле формулой
=СЧЁТЕСЛИ(C:C; C2): значения больше единицы требуют внимания.
Такая раскладка позволяет проверить всю выгрузку за минуту: отсортировали по столбцу E — увидели повторы, отсортировали по D — нашли слишком длинные адреса.
Частые проблемы при работе с выгрузками
- Лишние пробелы. В выгрузках из учётных систем они встречаются постоянно. Функция
СЖПРОБЕЛЫрешает вопрос до транслитерации. - Неразрывные пробелы. Обычная очистка их не видит — заменяйте отдельно, символ с кодом 160.
- Переносы строк внутри ячейки. Дают неожиданные дефисы в середине адреса.
- Одинаковые названия в разных категориях. Дадут одинаковые адреса — решается добавлением раздела в путь, о чём в статье про структуру URL интернет-магазина.
Частые вопросы
Есть ли в Excel встроенная функция транслитерации?
Нет, штатной функции не существует. Нужно либо строить цепочку из ПОДСТАВИТЬ, либо писать пользовательскую функцию на VBA, либо обрабатывать список вне таблицы.
Почему формула путает регистр букв?
ПОДСТАВИТЬ различает большие и маленькие буквы. Приводите текст к нижнему регистру функцией НИЖНИЙ до замены символов.
Сохранится ли порядок строк при обработке в генераторе?
Да, строки обрабатываются последовательно. Учтите только, что полностью пустые строки в результат не попадают.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.