Excel макросы замена букв

  • Формула транслита с помощью стандартных функций Excel
    • Формула на 64 уровня вложенности без заглавных Ъ и Ь
    • Скачать файл-шаблон с транслитерацией
    • Формулы транслита, итоги
  • Функция на VBA
  • Заменить русские буквы на английские в Excel и наоборот
Пример результата транслитерации в Excel

Как перевести кириллицу в транслит в Excel?

Технически транслитерация — это замена по списку значений — символов на определенные их эквиваленты в другой раскладке. Значит, и задача состоит в том, чтобы в Excel осуществить эту серию замен.

Удивительно, но сделать такую массовую замену и транслитерировать текст в Excel можно множеством способов. Обо всех подробнее далее.

Наименее изящное, тем не менее, самое простое решение задачи. В Excel для замены символов есть функция ПОДСТАВИТЬ (англ. SUBSTITUTE). Формула принимает на вход 4 аргумента:

  1. Текст для обработки, в котором будет производиться замена (текст);
  2. Заменяемый фрагмент (стар_текст);
  3. На что заменить (нов_текст);
  4. Какой по счету встреченный в значении фрагмент заменить. (номер_вхождения).
Синтаксис Excel формулы ПОДСТАВИТЬ

Четвертый параметр является опциональным и, если он не заполнен, заменяются все встреченные в тексте фрагменты.

Как раз то, что нам нужно! Поскольку Excel позволяет составлять сложные вложенные функции, мы можем сделать эту серию замен в одной много раз вложенной формуле.

Но есть несколько проблем, которые в сочетании не дают возможность сделать идеальную единую формулу транслита. Вот они:

  • В русском алфавите 33 буквы.
  • Идеальная формула транслита должна сохранять при замене регистр символов. Благо, функция “ПОДСТАВИТЬ” — регистрозависимая. Получается, что нужно делать не 33, а 66 замен. Но
  • в Excel есть ограничение количества уровней вложенности в одной формуле — 64.

Будь в русском алфавите хотя бы на одну букву меньше, мы бы уложились в ограничения Excel. Есть ли решение? Да, довольно простое.

Формула на 64 уровня вложенности без заглавных Ъ и Ь

Как правило, заглавные буквы в словах бывают, если это начало слова. Или если это аббревиатура, но аббревиатуры тоже составляются из первых букв слов.

А вы знаете слова, начинающиеся с Ъ или Ь? :)

Кажется, их можно пропустить. Так мы экономим два уровня вложенности и укладываемся в лимиты Excel (66 – 2 = 64)!

Важно также учитывать, что при транслитерации заглавных букв Ж, Ш, Ч, Щ и т.д., когда английский эквивалент состоит из нескольких букв, заглавной на латинице должна быть только первая. Интернет полон решениями, где этот момент не учтен. Итак, вот наиболее полная корректная формула:

=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
A1;
"А";"A");"Б";"B");"В";"V");"Г";"G");"Д";"D");"Е";"E");"Ё";"Yo");"Ж";"Zh");"З";"Z");"И";"I");"Й";"Y");
"К";"K");"Л";"L");"М";"M");"Н";"N");"О";"O");"П";"P");"Р";"R");"С";"S");"Т";"T");"У";"U");"Ф";"F");
"Х";"Kh");"Ц";"Ts");"Ч";"Ch");"Ш";"Sh");"Щ";"Sch");"Ы";"Y");"Э";"E");"Ю";"Yu");"Я";"Ya");"а";"a");
"б";"b");"в";"v");"г";"g");"д";"d");"е";"e");"ё";"yo");"ж";"zh");"з";"z");"и";"i");"й";"y");"к";"k");
"л";"l");"м";"m");"н";"n");"о";"o");"п";"p");"р";"r");"с";"s");"т";"t");"у";"u");"ф";"f");"х";"kh");
"ц";"ts");"ч";"ch");"ш";"sh");"щ";"sch");"ъ";"y");"ы";"y");"ь";"");"э";"e");"ю";"yu");"я";"ya")

Скачать файл-шаблон с транслитерацией

Формула выше на основе функции ПОДСТАВИТЬ с несколькими условиями может быть видоизменена – вместо явного прописывания текстовых значений, можно сделать ее на основе конкретных ячеек. Чем удобнее такой подход? Тем, что формулу менять не нужно, а данные для замены представлены в удобном для восприятия и редактирования формате в столбцах A и B.

Транслитерация с помощью таблицы замен и формулы с 64 уровнями вложенности

Транслитерация с помощью таблицы замен и формулы с 64 уровнями вложенности

По ссылке можно скачать файл-шаблон, в котором применены эти функции.

Формулы транслита, итоги

У подхода с созданием таких мега формул есть свои плюсы и минусы. Минус один – они громоздки и такое не так-то просто сходу набрать. Поэтому их нужно где-то хранить и копировать при необходимости.

Плюсы в основном происходят из недостатков VBA-кода:

  • Формулы листа железно сработают в любой версии Excel на любом компьютере, даже с самыми жесткими политиками защиты данных.
  • Они легко изменяются, если нужно переделать правила транслитерации, и довольно просты.
  • Транспортабельны, т.е. формулы не “слетят”, если их отправить кому-либо и открыть на другом компьютере.

Функция на VBA

Код пользовательской функции, которая транслитерирует строчные в строчные, а заглавные – в заглавные, и при этом транслитерирует заглавные буквы Ж, Ш, Х, Ч, Щ и подобные, делая в транслите заглавной только первую букву (Zh, Sh, Kh, Ch, Sch…).

Точь-в-точь эта функция присутствует в надстройке !SEMTools и доступна всем желающим – нужно только скачать и установить !SEMTools. Далее функцию можно применять как обычную функцию Excel на листе. Например, =Translit(A1)

Function Translit(x As String) As String
    cyr = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
    lat = Array("", "a", "b", "v", "g", "d", "e", "e", "zh", "z", "i", "y", "k", _
        "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", _
        "sh", "sch", "y", "y", "", "e", "yu", "ya")
    For i = 1 To 33
        x = Replace(x, Mid(cyr, i, 1), lat(i), , , vbBinaryCompare)
        x = Replace(x, UCase(Mid(cyr, i, 1)), StrConv(lat(i), vbProperCase), , , vbBinaryCompare)
    Next
    Translit = x
End Function

Заменить русские буквы на английские в Excel и наоборот

Надстройка !SEMTools предлагает помимо основного еще 4 варианта замены:

  1. Обратный транслит (из латиницы в кириллицу);
  2. “Смена раскладки” – asdf -> фыва;
  3. Замена букв с идентичным начертанием — кириллица в латиницу;
  4. Аналогичная замена английских букв, похожих на русские, на действительно русские.

Последние два пункта тесно связаны с ситуациями, когда удалось найти русские слова, содержащие латиницу или английские слова с кириллическими символами, и теперь нужно исправить такой текст.

Чтобы произвести транслитерацию, достаточно просто выделить столбец с данными и вызвать нужную процедуру. Данные изменятся на месте.

Транслитерация в !SEMTools

Нужно сделать транслитерацию русского на латиницу в Excel или наоборот?
Быстро решить эту и более 500 других задач поможет надстройка !SEMTools.

Транслит

Если Вам часто приходится переводить кириллицу в транслит (а попробуйте-ка сделать это для фамилии «Кржижановский», например), то эта функция — для Вас.

Откройте редактор Visual Basic (Alt+F11), вставьте через меню новый пустой программный модуль (Insert — Module) и скопируйте туда текст этой функции:

Function Translit(Txt As String) As String

    Dim Rus As Variant
    Rus = Array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", _
    "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", _
    "щ", "ъ", "ы", "ь", "э", "ю", "я", "А", "Б", "В", "Г", "Д", "Е", _
    "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", _
    "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я")

    Dim Eng As Variant
    Eng = Array("a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", _
    "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", _
    "sh", "sch", "''", "y", "'", "e", "yu", "ya", "A", "B", "V", "G", "D", _
    "E", "JO", "ZH", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", _
    "S", "T", "U", "F", "KH", "TS", "CH", "SH", "SCH", "''", "Y", "'", "E", "YU", "YA")
    
    For I = 1 To Len(Txt)
        с = Mid(Txt, I, 1)
    
        flag = 0
        For J = 0 To 65
            If Rus(J) = с Then
                outchr = Eng(J)
                flag = 1
                Exit For
            End If
        Next J
        If flag Then outstr = outstr & outchr Else outstr = outstr & с
    Next I
    
    Translit = outstr
    
End Function

Теперь на любом листе этой книги Вы можете использовать эту функцию, вставив ее через Мастер Функций:

  • в Excel 2003 и старше — через меню Вставка — Функция (Insert — Function)

  • в Excel 2007 и новее — через вкладку Вставка — Функция (Insert — Function)

 из категории Определенные пользователем (User defined):

translit.gif

В этом макросе варианты замены русских букв английскими эквивалентами представлены согласно ГОСТ. Если для вашей задачи нужны другие версии (например, русская «я» должна выводиться как «ja», а не как «ya» и т.д.), то можно свободно подкорректировать это в теле макроса. Как легко догадаться, два первых массива Rus и Eng как раз и кодируют эти подстановки.

Для новых версий Excel 2007-2010 и т.д. не забудьте сохранить вашу книгу как файл с поддержкой макросов (Macro Enabled Workbook), т.е. в формате XLSM.

Ссылки по теме

  • Макрос-переводчик
  • Преобразование русского текста в транслит с помощью надстройки PLEX

Хитрости »

12 Август 2015              83647 просмотров


Массовая замена слов

Предположим, что нам необходимо заменить все «ул.» на листе на «улица «. Или русское слово «дом» на английское «house». Или еще интереснее: все английские буквы на русские. Например, английская «а» должна быть заменена на русскую «a», английская «c» на русскую «с», английская «H» на русскую «Н» и т.д. А такое тоже нередко бывает и доставляет проблемы. Ведь если в одной таблице будут русские буквы, а в другой английские — то применение большинства встроенных функций поиска(та же ВПР) просто не найдут соответствия.
Если подобную замену надо сделать для одного сочетания, то все просто: жмем Ctrl+H и указываем что заменить и на что. Но если таких замен надо сделать 20? Или 120? Это надо будет 120 раз нажать и ввести что заменять и на что. А если это надо сделать еще и не в одном документе — то…Думаю сами справитесь с умножением количества замен на количество файлов, в которых это надо сделать. И вроде бы простая операция превращается в ваш личный ад на работе.
Недавно на форуме участнику потребовалось автоматизировать именно такую штуку. Т.к. код несложный — решил написать и чуть дополнив выложить для всех кому код может потребоваться:

Option Explicit
Sub Replace_Mass()
    Dim s As String
    Dim lCol As Long
    Dim avArr, lr As Long
    Dim lLastR As Long
    Dim lToFindCol As Long, lToReplaceCol As Long, lLookAt As Long
 
    'запрашиваем направление перевода - с русского на англ. или наоборот
    lCol = Val(InputBox("Укажите направление перевода:" & vbNewLine & _
                    "   1 - ru-en" & vbNewLine & _
                    "   2 - en-ru", "Запрос", 1))
    If lCol = 0 Then Exit Sub
    'запрашиваем по части ячейки искать или по всему тексту
    'по умолчанию - по части
    lLookAt = Val(InputBox("Искать соответствие по части ячейки или по всему тексту:" & vbNewLine & _
                    "   1 - по всему тексту" & vbNewLine & _
                    "   2 - по части ячейки", "Запрос", 2))
    If lLookAt = 0 Then Exit Sub
 
    Select Case lCol
    Case 1
        lToFindCol = 1
        lToReplaceCol = 2
    Case 2
        lToFindCol = 2
        lToReplaceCol = 1
    End Select
 
    Application.ScreenUpdating = 0
    'Получаем с листа Соответствия значения, которые надо заменить в выделенном диапазоне
    With ThisWorkbook.Sheets("Соответствия")
        lLastR = .Cells(.Rows.Count, 1).End(xlUp).Row
        avArr = .Cells(1, 1).Resize(lLastR, 2)
    End With
    'заменяем
    For lr = 1 To UBound(avArr, 1)
        s = avArr(lr, lToFindCol)
        If Len(s) Then 'если значение для замены не пустое
            Selection.Replace s, avArr(lr, lToReplaceCol), lLookAt
        End If
    Next lr
    Application.ScreenUpdating = 1
End Sub

Как это работает. В книге есть специальный лист с именем «Соответствия». На нем в столбце А записаны слова, которые необходимо заменить, а в столбце В — на что эти слова заменить. Если в столбце А пусто — то замена не будет произведена. Если в столбце В пусто — то значение из столбца А будет просто удалено.
Замены производятся исключительно в выделенных на листе ячейках. Ячейки могут быть несмежными.

Итак, необходимо сделать много замен. Скачиваете файл:

  Массовая замена слов (54,5 KiB, 9 782 скачиваний)

Примечание: Я сделал файл как переводчик. Т.е. в первом столбце русские слова, во втором английские. Но в столбцах может быть что угодно — хоть слова, хоть символы, хоть числа.

На лист «Соответствия» записываете в столбец А — что заменять, в столбец В — на что заменять. Переходите на лист книги, в котором необходимо произвести замену. Выделяете ячейки, значения в которых надо найти и заменить. После чего жмете Alt+F8 и выбираете макрос «Tips_Macro_ReplaceMASS.xls!Replace_Mass»(или просто «Replace_Mass», если код в той же книге, что и ячейки для поиска и замены).

Первым появится

окно с запросом направления перевода. По умолчанию 1(ru-en). Т.е. будет браться слово из столбца А и заменяться словом из столбца В. Но если указать 2 — то будет браться слово из столбца В и заменяться словом из столбца А. Т.е. аналог переводчика — с рус. на англ. и наоборот. Либо из А в В, либо из В в А.

Вторым появится

запрос на метод просмотра данных:

  • если указать «1 — по всему тексту» — данные из столбца А будут заменять только в том случае, если ячейка в выделенном для замены диапазоне полностью совпадает со значением из столбца А листа «Соответствия». Например, в любой из выделенных ячеек записано «На столе книга», а на листе «Соответствия» в столбце А есть только слово «книга». Замена не будет произведена, т.к. необходимо, чтобы в столбце А было так же «На столе книга».
  • если указать «2 — по части ячейки» — данные из столбца А будут заменять в случае, если ячейка в выделенном для замены диапазоне содержит любое слово из столбца А листа «Соответствия». На том же примере — «На столе книга». Если выбрать 2, то в тексте «На столе книга» слово книга будет заменено на слово из столбца В — «book».

И еще один практический пример чуть модифицированного кода. Предположим, имеется таблица выручки по реализации продукции:
Таблица выручки
Как видно, здесь присутствую только номера статей, но нет их расшифровки. Зато расшифровка есть в отдельном листе «Справочник»:
Справочник
Как видно, в справочнике присутствуют нужные номера статей и можно было бы применить ту же ВПР(VLOOKUP) для замен. Если бы не одно но: в таблице по реализации помимо номеров статьей есть еще лишний текст «Статья затрат:». Конечно, можно сначала заменить этот текст, потом в отдельном столбце применить ВПР, заменить формулу значениями и вернуть в исходный столбец. Если при этом надо еще оставить текст «Статья затрат:», то надо будет сделать еще доп.манипуляции либо при составлении формулы, либо после. В любом случае — слишком много лишних телодвижений. А значит бОльшие времязатраты.
Приложенный ниже файл поможет сделать это в разы быстрее:

Скачать файл с примером и кодом:

  Массовая замена слов — статьи.xls (91,5 KiB, 2 647 скачиваний)

и в итоге за пару секунд получим следующий результат:
Результат замены
Достаточно выделить столбец со статьями на листе с реализацией и запустить код(либо нажатием кнопки заменить значения, либо нажав Alt+F8 и выбрав из списка макросов макрос

Replace_Mass

).
После нажатия на кнопку будут запрошены следующие параметры:

  1. указать номер столбца значений в листе «Справочник», в котором искать соответствия номерам статей(в нашем случае это столбец 1(А))
  2. указать номер столбца, значениями которого заменять найденные в таблице реализации значения(это может быть один из трех столбцов справочника: Группа затрат, Статья затрат, Подстатьи затрат). Логичнее всего указать столбец 4, т.к. он наиболее детализирован и конкретнее указывает расшифровку статьи
  3. далее будет предложено указать точность поиска:
    • если указать «1 — по всему тексту» — данные будут заменены только в том случае, если значение ячейки в выделенном для замены диапазоне полностью совпадает со значением из столбца А листа «Справочник». Т.е. если бы у нас в таблице реализации был бы записан только номер статьи(1.01), тогда можно было бы указать именно 1
    • если указать «2 — по части ячейки» — данные будут заменены только в том случае, если значение ячейки в выделенном для замены диапазоне содержит любое значение из столбца А листа «Справочник». Это больше подходит к описанному случаю, т.к. нам необходимо заменить исключительно номер статьей на их расшифровку, оставив при этом текст «Статья затрат: «

Если все указано корректно, то на листе будут произведены все необходимые замены.
Возможные ошибки, которые предусмотрены кодом и о которых будет сообщено соответствующим сообщением(код прервется, замены не будут произведены):

  • на листе Справочник нет значений
  • в качестве столбца для поиска значений и для замены значений на листе Справочник указано одно и то же число
  • в качестве столбца значений для замены указано число, превышающее общее количество столбцов на листе Справочник

Особое внимание хочу уделить случаю, когда выбирается замена по части ячейки. В этом случае лучше список на листе Справочник отсортировать по длине текста по тому столбцу, в котором будут значения для поиска. Зачем это надо: т.к. значение по части ячейки будет заменять не полное соответствие, то есть вероятность неверных замен. Например, есть текст «Статья затрат: 1.011». В то же время на листе Справочник есть статьи «1.01» и «1.011». Т.к. «1.01» идет раньше в большинстве случаев, то текст будет заменен некорректно: «Статья затрат: ТВ1«.
Чтобы получить длину строки текста можно использовать функцию ДЛСТР(LEN):
=ДЛСТР(A2)
=LEN(A2)

В отличие от кода, приведенного в начале статьи, код во втором файле позволяет производить замену не только на основании двух столбцов, но и ориентируясь на таблицу данных, как видно из реализации. Можно выбрать любой столбец Справочника для поиска значений и так же любой для замены, что предоставляет большую гибкость по замене значений.

Так же см.:
Замена значений по списку в PowerQuery
Найти в ячейке любое слово из списка
Замена ссылок в формулах на их значения
Как удалить строки по условию?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Транслитерация в excel довольно распространенная задача. Сделать транслит в Excel — значит, русские буквы превратить в английские или латинские

Часто неопытные пользователи делают транслитерацию в excel вручную, а более опытные используют многоэтажные формулы с подстановкой значений.

В этой статье мы научимся создавать небольшую пользовательскую функцию, которая умеет делать транслитерацию в Excel. В данном случае не нужно знать VBA, поскольку текст функции есть в статье, его можно просто скопировать.

Видео для тех, кто не любит читать

Итак, у нас есть таблица с ФИО сотрудников. Нужно сделать транслитерацию этих данных.

транслитерация в excel

1. Нажмем клавиши Alt + F11, чтобы перейти в редактор Visual Basic

2. В окне редактора Visual Basic перейдем в меню InsertModule

транслитерация в excel

3. Выделите следующий текст функции, скопируйте его (Ctrl + C) и вставьте в пустое окно модуля (Ctrl + V)

Function Translit(Txt As String) As String

 Dim Rus As Variant

 Rus = Array(«а», «б», «в», «г», «д», «е», «ё», «ж», «з», «и», «й», «к», _

 «л», «м», «н», «о», «п», «р», «с», «т», «у», «ф», «х», «ц», «ч», «ш», _

 «щ», «ъ», «ы», «ь», «э», «ю», «я», «А», «Б», «В», «Г», «Д», «Е», _

 «Ё», «Ж», «З», «И», «Й», «К», «Л», «М», «Н», «О», «П», «Р», _

 «С», «Т», «У», «Ф», «Х», «Ц», «Ч», «Ш», «Щ», «Ъ», «Ы», «Ь», «Э», «Ю», «Я»)

 Dim Eng As Variant

 Eng = Array(«a», «b», «v», «g», «d», «e», «jo», «zh», «z», «i», «j», _

 «k», «l», «m», «n», «o», «p», «r», «s», «t», «u», «f», «kh», «ts», «ch», _

 «sh», «sch», «»», «y», «‘», «e», «yu», «ya», «A», «B», «V», «G», «D», _

 «E», «JO», «ZH», «Z», «I», «J», «K», «L», «M», «N», «O», «P», «R», _

 «S», «T», «U», «F», «KH», «TS», «CH», «SH», «SCH», «»», «Y», «‘», «E», «YU», «YA»)

 For I = 1 To Len(Txt)

 с = Mid(Txt, I, 1)

 flag = 0

 For J = 0 To 65

 If Rus(J) = с Then

outchr = Eng(J)

 flag = 1

 Exit For

 End If

 Next J

 If flag Then outstr = outstr & outchr Else outstr = outstr & с

 Next I

 Translit = outstr

End Function

Обратите внимание, что в этом макросе знаки русского алфавита заменяются латиницей согласно ГОСТу. Если вам нужно, чтобы буквы заменялись иначе, измените их внутри макроса.

4. Закройте редактор Visual Basic. Данные сохранятся в нем автоматически.

5. Теперь установите курсор в первую ячейку, в которой нужно сделать транслитерацию. 

6. Перейдите на вкладку меню ФормулыВставить функцию.

транслитерация в excel

7. В выпадающем списке Категория выберите Определенные пользователем.

транслитерация в excel

8. Созданная для транслитерации функция называется Translit. Выделите ее и нажмите Ок.

транслитерация в excel

9. Установив курсор в поле Txt, щелкните по первой ячейке, для которой нужно сделать транслитерацию. Нажмите Ок.

транслитерация в excel

10. Скопируйте формулу до конца списка, потянув за нижний правый уголок выделенной ячейки. Транслитерация в Excel готова.

транслитерация в excel

Теперь транслитерация ячеек excel будет производиться макросом автоматически, достаточно указать или вызвать формулу =Translit(). Это удобно, если у вас большой список слов для транслитерации и вручную сделать это сложно. 


   Сообщество Excel Analytics | обучение Excel

    Канал на Яндекс.Дзен 

0 / 0 / 0

Регистрация: 20.09.2014

Сообщений: 7

1

Заменить один символ на другой на всех листах рабочей книги

20.09.2014, 22:45. Показов 20609. Ответов 20


Студворк — интернет-сервис помощи студентам

Доброго времени суток!
Помогите, кто в курсе.

В excel нужен макрос замены одного символа на другой (к примеру замена буквы «ё» на букву «е» на всех листах) , устал пользоваться комбинацией Ctrl+H на каждом листе, хочется кнопочкой)
Искал ответ в похожих темах, но ни один вариант не подошел.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

21.09.2014, 01:21

2

Зачем же на каждом? Меняйте сразу во всей книге — поищите там в подменюшках…



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

21.09.2014, 11:56

3

Hugo121, «во всей книге» — это не для каждой версии.
Maiki, у Вас какая версия Excel?



0



1 / 1 / 1

Регистрация: 02.05.2014

Сообщений: 20

22.09.2014, 00:02

4

В 2010)

Миниатюры

Заменить один символ на другой на всех листах рабочей книги
 



0



Антихакер32

Заблокирован

22.09.2014, 01:12

5

Лучший ответ Сообщение было отмечено Maiki как решение

Решение

Без разницы какая версия, у меня код состоит из кода..
а не из каких-то чудесных свойств разных версий

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Sub Start()
    Dim sh, s$, j$()
    On Error GoTo errr
    s = InputBox("Введите что, на что заменять, например е-ё", , "е-ё")
    j = Split(s, "-")
    
    For Each sh In Sheets
        sh.Cells.Replace Trim$(j(0)), Trim$(j(1))
    Next
errr:
End Sub

Вложения

Тип файла: xls Лист Microsoft Excel.xls (29.0 Кб, 51 просмотров)



1



Антихакер32

Заблокирован

22.09.2014, 01:18

6

Кликните здесь для просмотра всего текста

ps: версия Excel 2003



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 01:58

7

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

Без разницы какая версия, у меня код состоит из кода..

реально ржач.

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

j = Split(s, «-«)

функция Split была в VBA не всегда.



0



Антихакер32

Заблокирован

22.09.2014, 02:15

8

Цитата
Сообщение от ikki
Посмотреть сообщение

функция Split была в VBA не всегда.

да причем здесь ваши догадки ?.. это базовая функция Split и Join
у меня она была всегда, там важно даже не это,

а результат замены..
и работа этой части кода..

Visual Basic
1
2
3
    For Each sh In Sheets
        sh.Cells.Replace "ё", "е"
    Next

который заменяет символы во всех страницах книги..

ТС, так и подумает, да это не заработает можно не проверять, а я, зря старался



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 02:26

9

а причём тут «догадки»?
функции Split нет в Excel 95
это совершенно точно

и, возможно, в 97-м.

ну и ещё на пару моментов Вы наплевали.
1) в файле Excel бывают не только рабочие листы
2)

Цитата
Сообщение от F1

Remarks
The settings for LookAt, SearchOrder, MatchCase, and MatchByte are saved each time you use this method. If you don’t specify values for these arguments the next time you call the method, the saved values are used. Setting these arguments changes the settings in the Find dialog box, and changing the settings in the Find dialog box changes the saved values that are used if you omit the arguments. To avoid problems, set these arguments explicitly each time you use this method.

поэтому:

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

это не заработает можно не проверять

нет-нет, ничего подобного!
просто это будет работать иногда не для всех листов и иногда срабатывать не так, как ожидал того пользователь.

Добавлено через 2 минуты
мне кажется, последнее предложение требует такого смайлика:
хотя тема, в целом, забавная.



0



Антихакер32

Заблокирован

22.09.2014, 02:28

10

Да параметры: LookAt, SearchOrder, MatchCase надо было проставить
но по умолчанию они там уже должны быть, какие надо, я просто укоротил код
чтоб не грузить ТС-а, неоправданной сложностью и разгаворами о несовместимости версий



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 02:29

11

а это?

Цитата
Сообщение от ikki
Посмотреть сообщение

в файле Excel бывают не только рабочие листы



0



Антихакер32

Заблокирован

22.09.2014, 02:35

12

Будем надеятся, ТС нас рассудет, будут ли у его книги и рабочие и нерабочие листы
на которых он устал расставлять точки над Ё

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



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 02:51

13

мог бы.
но я свой вопрос автору темы задал.

Цитата
Сообщение от ikki
Посмотреть сообщение

Maiki, у Вас какая версия Excel?

ответа пока нет.
а в случае, если это Excel 2007+, никакого макроса вообще не надо.



0



Антихакер32

Заблокирован

22.09.2014, 02:58

14

Да уж… жаль, и прослетить за ним трудно, у него всего один вопрос был на форуме
хотя тут один из пользователей чтото упомянул в 4-м посте может он уже ответил заместо Maiki, остается считать ответом исключительно мой пост



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 03:09

15

пост #2 — тоже вполне себе ответ.



0



Антихакер32

Заблокирован

22.09.2014, 03:13

16

Кликните здесь для просмотра всего текста

Цитата
Сообщение от Hugo121
Посмотреть сообщение

поищите там в подменюшках…

Ну да, лучший ответ, поучитесь как надо отвечать ))



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 03:30

17

умение искать ответы самостоятельно — самое главное.
хотя научить этому бывает непросто.

Добавлено через 1 минуту
начать можно и с «поиска в подменюшках»



0



Антихакер32

Заблокирован

22.09.2014, 03:34

18

Ну вот давайте, расскажите об несовместимостях версий,
выложите разные варианты интерпритации кода..
и объясните пользователю, что не так в 95-м 97, 2003, 2007 и тд версиях
чего Вам стоит, я и сам потом Вам спасибку поставлю



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

22.09.2014, 03:38

19

неее, не надо меня «подначивать».
я тут со скуки флудю сегодня, да и то — между делом.
не буду я писать код в этой теме.
он давным-давно написан и есть во многих надстройках, в т.ч. бесплатных.
да и в виде кода — завались примеров.
это, конечно, для тех, кого, в гугле не забанили.
а с 2007-й версии — это штатная возможность программы.

зачем писать ненужное?



0



0 / 0 / 0

Регистрация: 20.09.2014

Сообщений: 7

22.09.2014, 13:08

 [ТС]

20

Отличный код, спасибо антихакер, на 2010 работает замечательно, а как его поправить, чтобы окошка не выскакивало? Мне необходимо, чтобы по нажатию на кнопку автоматически менялся определенный символ на другой.



0



Как правильно настроить поиск и замену английских букв в русском тексте таблиц Excel

Одна из типовых ситуаций, с которой все мы однажды сталкиваемся, выглядит так: кто-то при наборе текстовой информации в ячейку случайно использовал английские буквы (латиницу) вместо русских (кириллицы). Допустить такую ошибку легко даже самим, особенно если учесть изощренное расположение некоторых символов (русская «С» и английская «С», например) в стандартной раскладке клавиатуры.

Использование символов латиницы в русском тексте порождает огромное количество проблем. От путаницы при банальной сортировке по алфавиту до некорректной консолидации данных при автоматическом объединении нескольких таблиц в одну. Выискивать похожие по виду символы и проверять, не являются ли они символами английской раскладки, крайне мучительно. Поэтому имеет смысл рассмотреть более изящные варианты решения этой задачи.

Способ 1. Шрифт без кириллицы

Выделите диапазон ячеек с проверяемым текстом и временно установите для него любой шрифт, не содержащий кириллицу, например Albertus, Bauhaus93 или любой аналогичный (находится методом перебора). Внешний вид символов кириллицы и латиницы станет отличаться, и можно будет легко визуально локализовать некорректные символы.

Шрифт без кириллицы

Шрифт без кириллицы

Способ 2. Подсветка латиницы красным цветом шрифта

Этот способ является продолжением и развитием предыдущей идеи и заключается в изменении цвета символов латиницы на красный с помощью небольшого макроса. Откройте редактор Visual Basic сочетанием клавиш Alt+F11, вставьте новый модуль (меню Insert – Module) и введите туда следующий код.

1
2
3
4
5
6
7
8
9
10
Sub ShowLatinRed()
For Each c In Selection
    For i = 1 To Len(c)
        If (Asc(Mid(c, i, 1)) >= 65 And Asc(Mid(c, i, 1)) <= 90) Or _
        (Asc(Mid(c, i, 1)) >= 97 And Asc(Mid(c, i, 1)) <= 122) Then
        c.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
        End If
    Next i
Next c
End Sub

Теперь если выделить интересующий диапазон ячеек и запустить наш макрос с помощью сочетания клавиш Alt+F8 или через вкладку Разработчик → Макросы (Developer → Macros), то символы латиницы выделятся красным цветом шрифта.

Символы латиницы выделятся красным цветом

Символы латиницы выделятся красным цветом

Выделяйте только ячейки с текстом, а не весь столбец листа – это больше миллиона пустых ячеек, перебирать которые макрос будет долго.

Способ 3. Функция IsLatin на VBA

Если количество проверяемых ячеек велико, то визуальное определение станет затруднительным. Для таких случаев можно создать пользовательскую функцию (назовем ее, например, IsLatin), которая будет проверять, присутствуют ли в заданной ячейке символы английского алфавита, и выдавать в качестве результата логическое значение ИСТИНА или ЛОЖЬ.

Откройте редактор Visual Basic сочетанием клавиш Alt+F11, вставьте новый модуль (меню Insert → Module) и введите туда текст этой небольшой функции.

1
2
3
4
5
6
7
8
9
Function IsLatin(str As String) as Boolean
	str = LCase(str)
    LatinAlphbet = "*[abcdefghijklmnopqrstuvwxyz]*"
    If str Like LatinAlphbet Then
        IsLatin = True
    Else
        IsLatin = False
    End If
End Function

Как можно заметить, макрофункция использует интересный оператор Like языка Visual Basic, который проверяет наличие в исходном тексте любых символов из английского алфавита, предварительно преобразовав текст в нижний регистр с помощью функции LCase.

Теперь в Мастере функций в категории Определенные пользователем (User Defined) можно найти нашу функцию IsLatin и воспользоваться ею. Функция выдаст значение ИСТИНА (TRUE), если найдет в тексте аргумента хотя бы один символ латиницы. В противном случае функция вернет значение ЛОЖЬ (FALSE).

Функция выдаст значение ИСТИНА или ЛОЖЬ

Функция выдаст значение ИСТИНА или ЛОЖЬ

Замена латиницы на кириллицу

Если необходимо не просто обнаружить чужеродные английские буквы в русском массиве текста, а исправить символы латиницы на соответствующую им кириллицу, можно быстро сделать это с помощью макроса. Откройте редактор Visual Basic сочетанием клавиш Alt+F11, вставьте новый модуль (меню Insert → Module) и введите туда его текст.

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Replace_Latin_to_Russian()
    Rus = "асекорхуАСЕНКМОРТХ"
    Eng = "acekopxyACEHKMOPTX"
    For Each cell In Selection
        For i = 1 To Len(cell)
            c1 = Mid(cell, i, 1)
            If c1 Like "[" & Eng & "]" Then
                c2 = Mid(Rus, InStr(1, Eng, c1), 1)
                cell.Value = Replace(cell, c1, c2)
            End If
        Next i
    Next cell
End Sub

Теперь если выделить на листе диапазон и запустить наш макрос сочетанием клавиш Alt+F8 или на вкладке Разработчик → Макросы (Developer → Macros), то все английские буквы, найденные в выделенных ячейках, будут заменены на равноценные им русские. Только будьте осторожны, чтобы не заменить случайно нужную вам латиницу.

Function Translit(ByVal txt As String) As String
    iRussian$ = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
    iTranslit = Array("", "a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "jj", "k", _
                      "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", _
                      "sh", "zch", "''", "'y", "'", "eh", "ju", "ja")
    For iCount% = 1 To 33
        txt = Replace(txt, Mid(iRussian$, iCount%, 1), iTranslit(iCount%), , , vbTextCompare)
    Next
    Translit$ = txt
End Function

Sub ПримерИспользованияФункцииTranslit()
    txt = "проверка работы транслита"
    newtxt = Translit(txt) ' результат = строка "proverka rabot'y translita"
    MsgBox "Строка """ & txt & """" & vbNewLine & "преобразована в строку """ _
         & newtxt & """", vbInformation, "Результат обработки"
End Sub

Надстройку для транслитерации выделенного диапазона ячеек,
а также расширенную версию функции транслитерации, можно скачать в этой статье

(добавлено в связи с просьбой выполнить обратную транслитерацию)
К сожалению, процесс обратной транслитерации весьма затруднён (я бы даже сказал, что в общем случае невозможно сделать такую функцию, которая преобразовывала бы строку после транслитерации к исходному виду).

Попытаюсь объяснить, почему так происходит:
Допустим, в качестве исходной строки у нас будет текст «щзч схш жзх»

Sub ПримерИспользованияФункцииTranslit()
    txt = "щзч схш жзх"
    newtxt = Translit(txt)
    Debug.Print newtxt    ' результат = строка "zchzch shsh zhzh"

    MsgBox "Строка """ & txt & """" & vbNewLine & "преобразована в строку """ _
           & newtxt & """", vbInformation, "Результат обработки"
End Sub

И что же мы видим на выходе?
А вот что: «zchzch shsh zhzh»

Достаточно похожие сочетания букв, не правда ли?
И как теперь макросу определить, что означает сочетание «zch sh zh» — «щ сх ж» или «зч ш ж»?
Или, может, «зч сх зх»? Все варианты для макроса ведь равнозначны…

А сочетание «zhzh» следует перевести как «зхзх» или как «жж»?
То же самое касается некоторых других буквосочетаний.

Специально проверил транслитерацию подобных сочетаний на популярном сервисе http://www.translit.ru/
Результат — при обратном переводе на русский исходная строка изменилась: схш жзх —> shsh zhzh —> шш жж

Вывод: учитывая возможное количество неопределённостей, проще обратную транслитерацию выполнять вручную.


Другой вариант функции:

Function Translit(ByVal txt As String) As String        ' с учётом регистра символов
    txtRussian$ = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
    arrTranslit = Array("", "a", "b", "v", "g", "d", "e", "e", "zh", "z", "i", "y", "k", _
                        "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "tch", _
                        "sh", "sch", "", "y", "", "e", "yu", "ya")
    For iCount% = 1 To 33
        txt$ = Replace(txt$, Mid(txtRussian$, iCount%, 1), arrTranslit(iCount%), , , vbBinaryCompare)      ' строчные
        txt$ = Replace(txt$, UCase(Mid(txtRussian$, iCount%, 1)), UCase(arrTranslit(iCount%)), , , vbBinaryCompare)     ' прописные
    Next
    Translit$ = txt$
End Function

Результат работы (другой набор символов для замены, учитывается регистр)

Исходная строка: «А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я»
Итоговая строка: «A-B-V-G-D-E-E-ZH-Z-I-Y-K-L-M-N-O-P-R-S-T-U-F-KH-TS-TCH-SH-SCH—Y—E-YU-YA»

  • 53482 просмотра

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

На чтение 5 мин. Просмотров 2k. Опубликовано 15.12.2019

Содержание

  1. Описание функции
  2. Пример
  3. Первый способ транслитерировать русский текст
  4. Второй способ перевода русского текста в транслит в Excel с помощью пользовательской функции

Описание функции

Функция =ТРАНСЛИТ(ТЕКСТ) имеет всего один аргумент

  • ТЕКСТ — строка (или ссылка на ячейку), к которой необходимо применить транслитерацию текста.

Пример

Следующий пример демонстрирует работу данной функции:

Очень часто требуется преобразовать русский текст (кириллицу) в английский (транслит), не перевести, а написать русские слова английскими буквами.

Такое, например, может понадобиться для импорта данных в какую-нибудь программу, базу данных, которая не поддерживает русские буквы. Задача распространенная, но стандартными средствами Excel не решается.

Мы предлагаем вам два варианта решения данной задачи.

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

Первый способ транслита русского текста достаточно топорный — с использованием приложения Punto Switcher от Яндекс.

Скачиваем программу Punto Switcher на официальном сайте: http://punto.yandex.ru/

Punto Switcher — программа, которая автоматически переключает раскладку клавиатуры. Она знает, что «ghbdtn» — это «привет», а «пщщв ьщктштп» — это «good morning».

Так вот, данная программа, помимо своей основной функции можете переводить текст в транслит, менять регистр выделенного текста (сделать из «иванов» в «ИВАНОВ») и другое.

Устанавливаем программу себе на компьютер, в системном трее должен появится значок программы

Если зайти в настройки (правой кнопкой мыши по значку, выбрать настройки, горячие клавиши), то можно увидеть, что по умолчанию установлено переводить текст в транслит с помощью горячих клавиш Alt+Scroll Lock

К сожалению, в самом Excel программа транслитерировать текст не сможет, необходимо промежуточное действие. Копируем столбец с русскими буквами, открываем блокнот на компьютере (Notepad) и вставляем туда текст, далее выделяем текст в блокноте и нажимаем клавиши Alt+Scroll Lock, текст автоматически поменяется на транслит.

Далее вы просто копируете этот текст и вставляете обратно в Excel.

Это удобно если нужно например перевести в translit, например один объемный столбец данных на русском языке, но иногда преобразование текста в транслит требуется с помощью формул Excel, поэтому рассмотрим второй способ с использованием пользовательской функции Excel, написанной на VBA

Второй способ перевода русского текста в транслит в Excel с помощью пользовательской функции

Есть специальный макрос для создания пользовательской функции.

Переключите раскладку на русский язык!! Копируем данный код, открываем среду VBA, для это нажмите правой кнопкой на активный лист и выберите пункт «Исходные данные», либо нажмите Alt+F11 далее через меню выберите новый программный модуль (Insert — Module)

и в открывшееся окно вставляете данный код и закрываете это окно.

После этого в любом месте данного листа (а при вставке кода с помощью Insert — Module — в любом месте данной книги) вы сможете использовать пользовательскую функцию, которую можно вызвать выбрав:

Вставка — Функция ( Insert — Function )

в Excel 2013 Функция — Вставить функцию

Выбираем Категория: определенные пользователем, в данном списке должна появится наша функция Translit

Можно просто в нужной ячейке набрать =Transit (ссылка_на_русский_текст)

После этого протягиваем формулу и получаем нужный нам результат.

Если вы присмотритесь в полученный результат, то увидите, что данные немного отличаются, например

Ivanov Serge j Petrovich и Ivanov Serge y Petro vich

то есть буква «й» преобразовалась по-разному, если для вас это критично, то нужно будет немного поменять указанный выше код. В коде есть две таблицы — одна на русском языке, другая латиницей. Не трудно догадаться, что вам необходимо поменять нужные вам буквы. В данном случае в коде нужно найти «j» и поменять на «y», если требуется, то по аналогии поступаем с другими буквам.

  • Начиная с Excel 2007 не забудьте сохранить файл в формате поддержки макросов — xlsm, иначе макрос не сохранится;
  • Данный макрос необходимо вставлять в каждую отдельную книгу, в которой вы хотите, чтобы он работал;
  • Иногда требуется, чтобы была не встроенная функция, а макрос при запуске которого текст будет переводится в транслит, в этом случае нужно вставить код, указанный ниже. В итоге, для перевода текста в transit необходимо выделить нужный текст на русском языке (диапазон ячеек) и запустить макрос «Translit» и данный текст будет обработан.
  • Важно! Перед копированием данного кода, обязательно переключите раскладку клавиатуры на русский язык.

Итак, надеюсь вы нашли ответ на свой вопрос о том, как проще всего транслитерировать текст в Excel (преобразовать текст на русском языке в транслит).

Ставьте лайки, подписывайтесь на наши группы в социальных сетях и следите за следующими уроками.

Если Вам часто приходится переводить кириллицу в транслит (а попробуйте-ка сделать это для фамилии «Кржижановский», например), то эта функция — для Вас.

Откройте редактор Visual Basic (Alt+F11), вставьте через меню новый пустой программный модуль (Insert — Module) и скопируйте туда текст этой функции:

Теперь на любом листе этой книги Вы можете использовать эту функцию, вставив ее через Мастер Функций:

из категории Определенные пользователем (User defined) :

В этом макросе варианты замены русских букв английскими эквивалентами представлены согласно ГОСТ. Если для вашей задачи нужны другие версии (например, русская «я» должна выводиться как «ja», а не как «ya» и т.д.), то можно свободно подкорректировать это в теле макроса. Как легко догадаться, два первых массива Rus и Eng как раз и кодируют эти подстановки.

Для новых версий Excel 2007-2010 и т.д. не забудьте сохранить вашу книгу как файл с поддержкой макросов (Macro Enabled Workbook) , т.е. в формате XLSM.

Понравилась статья? Поделить с друзьями:
  • Excel макросы текст в число
  • Excel макросы для экономиста
  • Excel макросы сумма ячеек
  • Excel макросы для учета
  • Excel макросы ссылки с файла на файл