TransliterateForURL - Транслитерация для URL
Макрос транслитерации выделенного диапазона с кириллицы на латиницу (из русских буковок получаются буржуйские) с адаптацией результата для использования в составе URL.
Да, я люблю изобретать велосипеды, но в данном случае моя любовь к бесполезным изобретениям тут ни при чём.
Знаю, что макросы подобные представленному здесь в изобилии представлены на просторах интернета и успешно используются многими пользователями, мной в частности. Не было цели придумать что-то принципиально новое, важно было получить свою легальную копию продукта, с немного специфичным уклоном, который можно распространять на своё усмотрение, не нарушая авторства.
Второй важной задачей было опробовать возможности ChatGPT в сфере написания скриптов для Экселя. Нейросеть со своей задачей прекрасно справилась, хоть и не с первого раза. После многократных корректировок я получил ровно то, что было нужно.
В-третьих, требовалась понятная инструкция к макросу, которую также любезно составил ChatGPT. 😊 Сам то я разберусь (точнее вспомню) как макросы к Экселю прилаживать, а вот для коллег нужна инструкция.
Ну и четвёртое: поскольку в VBA я мало что понимаю, то для меня важно, что каждый блок кода снабжен комментарием, поясняющим функции блока. Таким образом проще внести незначительные коррективы, если потребуется, даже не обладая глубокими познаниями в сфере.
Код макроса:
Sub TransliterateForURL()
Dim cell As Range
Dim cyrillicToLatin As Object
Set cyrillicToLatin = CreateObject("Scripting.Dictionary")
' Задаем пары кириллических символов и их латинских эквивалентов
cyrillicToLatin.Add "А", "A": cyrillicToLatin.Add "Б", "B": cyrillicToLatin.Add "В", "V"
cyrillicToLatin.Add "Г", "G": cyrillicToLatin.Add "Д", "D": cyrillicToLatin.Add "Е", "E"
cyrillicToLatin.Add "Ё", "E": cyrillicToLatin.Add "Ж", "ZH": cyrillicToLatin.Add "З", "Z"
cyrillicToLatin.Add "И", "I": cyrillicToLatin.Add "Й", "I": cyrillicToLatin.Add "К", "K"
cyrillicToLatin.Add "Л", "L": cyrillicToLatin.Add "М", "M": cyrillicToLatin.Add "Н", "N"
cyrillicToLatin.Add "О", "O": cyrillicToLatin.Add "П", "P": cyrillicToLatin.Add "Р", "R"
cyrillicToLatin.Add "С", "S": cyrillicToLatin.Add "Т", "T": cyrillicToLatin.Add "У", "U"
cyrillicToLatin.Add "Ф", "F": cyrillicToLatin.Add "Х", "H": cyrillicToLatin.Add "Ц", "TS"
cyrillicToLatin.Add "Ч", "CH": cyrillicToLatin.Add "Ш", "SH": cyrillicToLatin.Add "Щ", "SCH"
cyrillicToLatin.Add "Ъ", "": cyrillicToLatin.Add "Ы", "Y": cyrillicToLatin.Add "Ь", ""
cyrillicToLatin.Add "Э", "E": cyrillicToLatin.Add "Ю", "YU": cyrillicToLatin.Add "Я", "YA"
' Пары для строчных букв
cyrillicToLatin.Add "а", "a": cyrillicToLatin.Add "б", "b": cyrillicToLatin.Add "в", "v"
cyrillicToLatin.Add "г", "g": cyrillicToLatin.Add "д", "d": cyrillicToLatin.Add "е", "e"
cyrillicToLatin.Add "ё", "e": cyrillicToLatin.Add "ж", "zh": cyrillicToLatin.Add "з", "z"
cyrillicToLatin.Add "и", "i": cyrillicToLatin.Add "й", "i": cyrillicToLatin.Add "к", "k"
cyrillicToLatin.Add "л", "l": cyrillicToLatin.Add "м", "m": cyrillicToLatin.Add "н", "n"
cyrillicToLatin.Add "о", "o": cyrillicToLatin.Add "п", "p": cyrillicToLatin.Add "р", "r"
cyrillicToLatin.Add "с", "s": cyrillicToLatin.Add "т", "t": cyrillicToLatin.Add "у", "u"
cyrillicToLatin.Add "ф", "f": cyrillicToLatin.Add "х", "h": cyrillicToLatin.Add "ц", "ts"
cyrillicToLatin.Add "ч", "ch": cyrillicToLatin.Add "ш", "sh": cyrillicToLatin.Add "щ", "sch"
cyrillicToLatin.Add "ъ", "": cyrillicToLatin.Add "ы", "y": cyrillicToLatin.Add "ь", ""
cyrillicToLatin.Add "э", "e": cyrillicToLatin.Add "ю", "yu": cyrillicToLatin.Add "я", "ya"
' Проходим по каждой ячейке в выделенном диапазоне
For Each cell In Selection
If Not IsEmpty(cell.Value) Then
Dim text As String
text = cell.Value
Dim transliteratedText As String
transliteratedText = ""
' Выполняем транслитерацию по символам
For i = 1 To Len(text)
Dim char As String
char = Mid(text, i, 1)
' Проверяем, есть ли символ в словаре
If cyrillicToLatin.exists(char) Then
transliteratedText = transliteratedText & cyrillicToLatin(char)
Else
' Заменяем пробелы на дефисы и добавляем только допустимые символы, включая дефисы
If char = " " Then
transliteratedText = transliteratedText & "-"
ElseIf char Like "[A-Za-z0-9-]" Then
transliteratedText = transliteratedText & char
' Блок кода для сохранения подчёркиваний
ElseIf char = "_" Then
transliteratedText = transliteratedText & "_" ' <<<<< Легко закомментировать эту строку
End If
End If
Next i
' Преобразуем в нижний регистр
transliteratedText = LCase(transliteratedText)
' Убираем возможные повторяющиеся дефисы
Do While InStr(transliteratedText, "--") > 0
transliteratedText = Replace(transliteratedText, "--", "-")
Loop
' Удаляем дефис в начале и конце строки, если он есть
If Left(transliteratedText, 1) = "-" Then transliteratedText = Mid(transliteratedText, 2)
If Right(transliteratedText, 1) = "-" Then transliteratedText = Left(transliteratedText, Len(transliteratedText) - 1)
' Устанавливаем результат в ячейку
cell.Value = transliteratedText
End If
Next cell
End Sub
2. Описание работы макроса
Макрос автоматически преобразует выбранный диапазон ячеек, содержащий кириллический текст, в латиницу. При этом макрос заменяет кириллические символы на соответствующие латинские эквиваленты, заменяет пробелы на дефисы, а также удаляет лишние спецсимволы и дублирующиеся дефисы. Дополнительно макрос удаляет дефисы в начале и конце строки, если они появляются после преобразования.
3. Стандарты для использования в URL
Результат работы макроса соответствует стандартам URL:
- Все символы преобразуются в нижний регистр.
- Пробелы заменяются на дефисы (
-
). - Удаляются любые специальные символы, кроме букв, цифр, дефисов и, при необходимости, знака подчёркивания.
- Лишние дефисы в начале и конце строки убираются автоматически.
- Повторяющиеся дефисы заменяются на один.
4. Варианты применения
Этот макрос полезен для подготовки текста для:
- Создания URL – Транслитерированный текст подходит для URL, поскольку текст преобразуется в латиницу и соответствует всем необходимым стандартам.
- Формирования уникальных идентификаторов – Подходит для случаев, когда нужно создать понятные и читаемые идентификаторы на основе текста.
- Системного использования в базе данных – Макрос может помочь при формировании полей на латинице из данных на кириллице.
5. Инструкция по подключению и запуску макроса
Вариант 1: Быстрое применение макроса
- Откройте Excel и нажмите
Alt + F11
, чтобы открыть редактор VBA. - В редакторе VBA выберите "Insert" > "Module" для создания нового модуля.
- Скопируйте код макроса
TransliterateForURL
и вставьте его в модуль. - Закройте редактор VBA.
- В Excel выделите диапазон ячеек с текстом на кириллице.
- Нажмите
Alt + F8
, выберите макросTransliterateForURL
, затем нажмите «Run».
Вариант 2: Сохранение файла с макросом
- Следуйте шагам 1–4 из предыдущего варианта.
- Сохраните файл как
Excel Macro-Enabled Workbook
(Расширение:.xlsm
), выбрав этот формат в меню «Сохранить как». - Открыв файл в будущем, вы сможете использовать макрос, выделив нужный диапазон и запустив его через
Alt + F8
.
6. Инструкция по отключению сохранения знака подчёркивания
Макрос по умолчанию сохраняет знак подчёркивания (_
), если он есть в исходном тексте. Чтобы отключить сохранение этого символа, выполните следующие шаги:
- Откройте редактор VBA (нажмите
Alt + F11
) и найдите модуль с макросомTransliterateForURL
. - В строке кода
transliteratedText = transliteratedText & "_"
добавьте символ комментария'
в начале строки, чтобы она выглядела так:'transliteratedText = transliteratedText & "_"
7. Похожие решения других авторов
Если нужно что-то немного другое, а не то, что тут или хочется посмотреть, как оно ещё бывает, то приведу короткий список программных решений, выполняющих транслитерацию.
-
Транслит – макрос на сайте «Планета Эксель». Автор сайта очень толковый чувак, уже много лет обращаюсь к его материалам для расширения своих знаний в Экселе.
-
Транслитерация в Excel, замена русских букв на английские – формула и макрос в окружении весьма познавательной статьи на сайте разработчика платной утилиты (набора инструментов) !SEMTools, которая стала для меня палочкой-выручалочкой во многих вопросах. Это не реклама (хотя, она, конечно же, но бескорыстная). Автор проекта тоже товарищ весьма мозговитый, полезные знания транслирует всякие.
-
Надстройка для транслитерации (кодирования) диапазона ячеек – бесплатная надстройка на сайте ExcelVBA. Не уверен, что сам её использовал, но какие-то полезности с этого сайта качал – работают, за что спасибо. Если честно, антивирус на них ругается, но мне думается, что это из-за специфики макросов.
-
Создано03 ноября 2024
-
Последняя правка03 ноября 2024