Поиск символов латиницы в русском тексте
Одна из типовых ситуаций, с которой все мы однажды сталкиваемся: кто-то (возможно даже мы сами) при наборе текстовой информации в ячейку, случайно использовал английские буквы (латиницу) вместо русских (кириллицы). Допустить такую ошибку достаточно легко, особенно если учесть изощренное расположение некоторых символов в стандартной раскладке клавиатуры. Ну какому идиоту, скажите мне, пришло в голову помещать на одну клавишу две одинаковых по написанию буквы (английская «си» и русская «эс»)? Да и с другими символами не лучше. Но, как говорится, «фарш невозможно провернуть назад» — текущая раскладка давно стала стандартом и никуда от этого не деться.
Использование символов латиницы в русском тексте порождает огромное количество проблем. От путаницы при банальной сортировке по алфавиту до некорректной консолидации данных при автоматическом объединении нескольких таблиц в одну.
Выискивать похожие по виду символы и проверять не являются ли они символами английской раскладки крайне муторно. Поэтому поищем более изящные варианты…
Способ 1. Шрифт без кириллицы
Выделите диапазон ячеек с проверяемым текстом и временно установите для него любой шрифт не содержащий кириллицу, например Albertus или любой аналогичный (находится методом тыка). Внешний вид символов кириллицы и латиницы станет отличаться и можно будет легко визуально локализовать некорректные символы:
Способ 2. Функция IsLatin на VBA
Создадим пользовательскую функцию (назовем ее, например, IsLatin), которая будет проверять — присутствуют ли в заданной ячейке символы английского алфавита и выдавать в качестве результата логическое значение ИСТИНА или ЛОЖЬ.
Откройте редактор Visual Basic сочетанием клавиш ALT+F11 или в старых версиях Excel — через меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor), вставьте новый модуль (меню Insert — Module) и скопируйте туда текст этой функции:
Public Function IsLatin(str As String) str = LCase(str) LatinAlphbet = "*[abcdefghijklmnopqrstuvwxyz]*" If str Like LatinAlphbet Then IsLatin = True Else IsLatin = False End If End Function
Закройте редактор Visual Basic и вернитесь в Excel.
Теперь в Мастере функций в категории Определенные пользователем (User Defined) можно найти нашу функцию IsLatin и воспользоваться ей. Синтаксис функции следующий:
=IsLatin(A2)
где для примера А2 — это адрес ячейки, содержащей текст
Функция выдаст значение ИСТИНА (TRUE), если найдет в тексте А2 хотя бы один символ латиницы. В противном случае функция вернет значение ЛОЖЬ (FALSE):
Способ 3. Подсветка символов латиницы красным цветом шрифта
Откройте редактор Visual Basic сочетанием клавиш ALT+F11 или в старых версиях Excel — через меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor), вставьте новый модуль (меню Insert — Module) и скопируйте туда текст этого макроса:
Sub ShowLatin() 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
Закройте редактор Visual Basic и вернитесь в Excel. Если теперь выделить интересующий диапазон ячеек (только не весь столбец или лист — а то считать до конца дня будет!) и запустить наш макрос с помощью сочетания клавиш ALT+F8 или через меню Сервис — Макрос — Макросы (Tools — Macro — Macros), то символы латиницы выделятся красным цветом шрифта:
Ссылки по теме
- Подсветка латиницы с помощью надстройки PLEX
- Что такое макросы, куда вставлять код макроса, как их использовать
- Найти латиницу в Excel – функция
- Найти кириллицу в Excel – функция
- Как найти прописные буквы
- Функция поиска прописных символов латиницы
- Функция поиска прописных кириллических символов
- Функция поиска любых прописных символов
- Функции “Найти латиницу” и “Найти кириллицу” с помощью UDF
- Найти латинские буквы в 2 клика
- Найти слова, содержащие и кириллицу, и латиницу
- С помощью регулярных выражений
- В две итерации
- Кейсы дальнейшего взаимодействия с данными
- Удалить
- Извлечь
- Изменить регистр
- Заменить символы
Важно: поскольку термин “найти” часто в сознании людей предполагает “найти и извлечь”, сразу оговоримся, что ниже именно булевая интерпретация поиска, иначе говоря, результата два – нашёл или не нашёл. Похожая, но все же другая задача – извлечь символы латиницы.
Текст, содержащий латиницу помимо кириллицы — довольно частое явление, и выявить, в какой раскладке текст, не всегда возможно визуально. Начертание многих символов в обеих раскладках идентично.
Когда нужно просто глазами обнаружить латиницу среди кириллических символов или наоборот, кириллицу в английском тексте, есть очень простое решение – использование неклассических шрифтов в Excel.
Например, Dubai Light сделает латиницу тоньше, Dubai Medium – жирнее кириллицы, Microsoft Himalaya – ниже, а Ink Free – выделит ее курсивом.
Но когда исходных данных много, важно не просто видеть, но и иметь возможность отфильтровать или отсортировать такие ячейки. Вариантов упростить и ускорить решение задачи несколько.
Задача поиска букв латинского алфавита в тексте – одна из нетривиальных в Excel, как и поиска любой длинной последовательности единичных символов. Как и в случае с поиском цифр, при обычном поиске придется перебирать все латинские буквы – а их 26, что ещё больше, чем цифр.
Составная формула массива пригодится в случаях, когда не хочется или нет возможности пользоваться макросами или пользовательскими функциями (UDF):
=СЧЁТ(ПОИСК({"a":"b":"c":"d":"e":"f":"g":"h":"i":"j":"k":"l":"m":"n":"o":"p":"q":"r":"s":"t":"u":"v":"w":"x":"y":"z"};A1))>0
Здесь A1 — ячейка, которую мы хотим “проверить” на наличие в ней латиницы. Функция возвращает “ИСТИНА” или “ЛОЖЬ”. Важно отметить, что функция “ПОИСК” не является регистрозависимой, поэтому позволяет найти буквы в любом регистре.
Можно ли диапазон букв выразить иным способом? Да, формулой массива, а помогут в этом функция СИМВОЛ и функция СТРОКА:
{=СЧЁТ(ПОИСК(СИМВОЛ(СТРОКА(65:90));A1))>0}
Отличие этой формулы массива от предыдущей – её нужно вводить без фигурных скобок, они появятся при вводе формулы сочетанием Ctrl + Shift + Enter (вместо обычного Enter). В формуле выше, где явно прописаны все буквы, фигурные скобки вводятся вручную — это явное указание строкового массива.
Найти кириллицу в Excel – функция
Как вы, наверное, догадались, найти кириллицу в тексте можно аналогичным путем:
=СЧЁТ(ПОИСК({"а":"б":"в":"г":"д":"е":"ё":"ж":"з":"и":"й":"к":"л":"м":"н":"о":"п":"р":"с":"т":"у":"ф":"х":"ц":"ч":"ш":"щ":"ъ":"ы":"ь":"э":"ю":"я"};A1))>0
Или формулой массива с функцией СИМВОЛ:
{=СЧЁТ(ПОИСК(СИМВОЛ(СТРОКА(192:223));A1))>0}
Формула массива будет работать корректно, если языком системы для non-Unicode программ выбран русский.
Есть небольшая разница в двух этих формулах – вторая в отличие от первой использует 32 буквы, т.к. буква Ё не входит в диапазон символов.
Как найти прописные буквы
В отличие от “ПОИСК”, “НАЙТИ” – функция регистрозависимая, что позволяет найти буквы в том регистре, в котором они перечислены.
Функция поиска прописных символов латиницы
=СЧЁТ(НАЙТИ({"A":"B":"C":"D":"E":"F":"G":"H":"I":"J":"K":"L":"M":"N":"O":"P":"Q":"R":"S":"T":"U":"V":"W":"X":"Y":"Z"};A1))>0
Функция поиска прописных кириллических символов
=СЧЁТ(НАЙТИ({"А":"Б":"В":"Г":"Д":"Е":"Ё":"Ж":"З":"И":"Й":"К":"Л":"М":"Н":"О":"П":"Р":"С":"Т":"У":"Ф":"Х":"Ц":"Ч":"Ш":"Щ":"Ъ":"Ы":"Ь":"Э":"Ю":"Я"};A1))>0
Функция поиска любых прописных символов
Поможет вам найти в ячейке символы и кириллицы, и латиницы, если они написаны заглавными буквами.
=СЧЁТ(НАЙТИ({"А":"Б":"В":"Г":"Д":"Е":"Ё":"Ж":"З":"И":"Й":"К":"Л":"М":"Н":"О":"П":"Р":"С":"Т":"У":"Ф":"Х":"Ц":"Ч":"Ш":"Щ":"Ъ":"Ы":"Ь":"Э":"Ю":"Я":"A":"B":"C":"D":"E":"F":"G":"H":"I":"J":"K":"L":"M":"N":"O":"P":"Q":"R":"S":"T":"U":"V":"W":"X":"Y":"Z"};A1))>0
Для поиска цифр в ячейке можно использовать такой же синтаксис.
Функции “Найти латиницу” и “Найти кириллицу” с помощью UDF
UDF (User-defined function, пользовательская функция) – тем, кто часто использует функции такого плана, помогут упростить синтаксис на листе, т.к. содержат калькуляции в коде.
Function найтиЛатиницу(txt As String) As Boolean
найтиЛатиницу = txt Like "*[A-z]*"
End Function
Function найтиКириллицу(txt As String) As Boolean
найтиКириллицу= txt Like "*[А-яЁё]*"
End Function
Найти латинские буквы в 2 клика
Максимально быстрый способ проверки на наличие латиницы в Excel доступен пользователям !SEMTools.
Порядок действий: скопировать диапазон, выделить скопированное и вызвать макрос в меню «Найти символы» группы «ОБНАРУЖИТЬ».
Найти слова, содержащие и кириллицу, и латиницу
Иногда простой поиск в ячейке латиницы и кириллицы не решает проблему, т.к. в ячейке изначально подразумевается наличие обоих видов символов. Например, “автомобиль Tоyоta”, “холодильник Siеmеns”. В двух этих примерах специально вставлены буквы из другого алфавита: Tоyоta содержит кириллическую “о”, а Siеmеns – кириллическую “e”. Начертание этих символов идентичное, но вот для роботов это совершенно разные символы.
Как с помощью Excel проверить отличие в написании букв на латинице или кириллице в отдельных словах? Формулы выше не отличат фразы, написанные корректно, от фраз, написанных некорректно, так как отдадут “ИСТИНА” всем фразам при проверке на кириллицу и латиницу.
Решить проблему можно, если искать по конкретным словам! В !SEMTools есть два решения этой задачи:
С помощью регулярных выражений
Процедура находится в меню “ОБНАРУЖИТЬ” – “Слова” – “По паттерну”. Паттерн REGEX позволяет решить задачу в один заход, т.к. в нем есть оператор “ИЛИ”.
Данное выражение означает, что нужно найти слова, в которых или после кириллического символа идет символ латиницы, или наоборот. При этом между символами могут быть внутри слова любые другие символы (цифры, дефисы и любые другие, кроме пробела).
([a-zA-Z].*[а-яА-ЯёЁ]|[а-яА-ЯёЁ].*[a-zA-Z])
Важно понимать, что сам паттерн применим к любой строке вне зависимости от количества слов в ней, но в рамках указанной процедуры !SEMTools применяется к отдельным словам.
В две итерации
Данный метод совершенно логичен, но требует чуть больше времени. Нужно просто сначала извлечь слова, содержащие латиницу, а потом, уже среди извлеченных этим способом, искать слова, содержащие кириллицу.
Кейсы дальнейшего взаимодействия с данными
Найти слова, содержащие кириллицу, латиницу или оба вида символов одновременно, – только полдела. За этапом их обнаружения зачастую следуют дальнейшие действия.
Удалить
Иногда нужно целиком удалить слова, содержащие латиницу. Дело в том, что в них могут находиться другие символы – цифры, кириллица, дефисы и другие знаки. Они останутся, если удалить из текста латиницу и ничего больше.
Извлечь
Можно захотеть извлечь латиницу. В !SEMTools это можно делать с помощью регулярных выражений, в том числе извлечь слова, содержащие латиницу, чтобы посчитать количество слов и посмотреть на их структуру. Из каталога товаров, например, быстро извлекать бренды, написанные на английском языке.
Изменить регистр
Бывают ситуации, когда слова, содержащие латиницу, имеет смысл сделать с заглавной буквы — это касается все тех же иностранных брендов.
Заменить символы
И, наконец, бывают ситуации, когда нужно заменить кириллицу на латиницу – но и здесь возможны вариации: можно транслитерировать, сменить раскладку или заменить символы на похожие с ними на другом языке. Подробнее про последний кейс: заменить русские буквы на английские и наоборот.
Про каждый из этих кейсов можно почитать с соответствующем разделе сайта, в надстройке присутствуют макросы для быстрой обработки подобных ситуаций.
Часто сталкиваетесь с этой или похожими задачами при работе в Excel?
!SEMTools поможет решить их быстро и легко!
Определим, имеется ли в текстовой строке буквы из латиницы, цифры или ПРОПИСНЫЕ символы. Научимся определять наличие нежелательных символов одной формулой.
Каждому символу соответствует свой код, в это верит функция
КОДСИМВ()
, которая старательно возвращает код для каждого символа. Соответствие кодов символам можно посмотреть через меню
.
Интересующие нас символы объединены в диапазоны (см.
файл примера
).
С помощью
формулы массива
заставим функцию
КОДСИМВ()
определять коды не только для одного символа, а для всей текстовой строки (например, из ячейки
A14
):
=КОДСИМВ(ПСТР($A14;СТРОКА(ДВССЫЛ(«A1:A»&ДЛСТР($A14)));1))
Разберем подробнее:
-
Формула
СТРОКА(ДВССЫЛ(«A1:A»&ДЛСТР($A14)))
возвращаетмассив вида
{1:2:3:4:5}, представляющий собой
порядковые числа
от 1 до числа, равного количеству символов текстового значения.
-
Функция
ПСТР()
последовательно по одному возвращает символы из всей строки; -
Функция
КОДСИМВ()
последовательно возвращает их коды.
Теперь, записав громоздкую, но простую для понимания
формулу массива
, подсчитаем, количество искомых символов в нужном нам диапазоне кодов:
=СУММ(ЕСЛИ((КОДСИМВ(ПСТР($A14;СТРОКА(ДВССЫЛ(«A1:A»&ДЛСТР($A14)));1))>=C14)* (КОДСИМВ(ПСТР($A14;СТРОКА(ДВССЫЛ(«A1:A»&ДЛСТР($A14)));1))<=D14);1;0))
Теперь можно создать форму для ответов на вопросы: есть ли в слове русские буквы?, есть ли ПРОПИСНЫЕ англ. буквы?
Например, для ответа на вопрос »
Есть ли в тектовой строке русские буквы?
» нужно задать следующие границы диапазона кодов: 192 (заглавная буква «А») и 255 (строчная буква «я»).
Данная команда позволяет быстро находить в тексте ячейки Кириллицу или Латиницу, выделять или удалять ее. Также позволяет менять Кириллицу (Латиницу) на Латиницу (Кириллицу):
Чтобы воспользоваться данной командой выделите ячейки с текстом, перейдите во вкладку «ЁXCEL» Главного меню, нажмите кнопку «Ячейки» и выберите команду «Кириллица — Латиница»:
Откроется диалоговое окно. Выберите один из девяти вариантов выполнения программы и нажмите кнопку «ОК»:
Программа выполнит необходимое действие:
- Выделить Латиницу -> программа выделит красным цветом все буквы Латиницы;
- Выделить Кириллицу -> программа выделит красным цветом все буквы Кириллицы;
- Удалить Латиницу -> программа удалит все буквы Латиницы;
- Удалить Кириллицу -> программа удалит все буквы Кириллицы;
- Заменить Кириллицу на Латиницу (мама -> mama) -> программа заменит все буквы Кириллицы на буквы Латиницы (буква х будет заменена на h);
- Заменить Кириллицу на Латиницу (х -> x) -> программа заменит все буквы Кириллицы, похожие на буквы Латиницы на буквы Латиницы (буква х будет заменена на x);
- Заменить Латиницу на Кириллицу (x -> х) -> программа заменит все буквы Латиницы, похожие на буквы Кириллицы на буквы Кириллицы (буква x будет заменена на х);
- Заменить Кириллицу на Латиницу (рщьу -> home) -> программа заменит все буквы Кириллицы на соответствующие этим же клавишам клавиатуры буквы Латиницы;
- Заменить Латиницу на Кириллицу (vfvf -> мама) -> программа заменит все буквы Латиницы на соответствующие этим же клавишам на клавиатуре буквы Кириллицы.
Для отмены операции нажмите кнопку отмены:
Важно:
- Варианты: «Выделить Кириллицу» и «Выделить Латиницу» — не имеют функции отмены.
- Если в выделенных ячейках цвет текста красный — вы не увидите результата работы вариантов: «Выделить Кириллицу» и «Выделить Латиницу».
Добавить комментарий
Транслитерация в excel довольно распространенная задача. Сделать транслит в Excel — значит, русские буквы превратить в английские или латинские
Часто неопытные пользователи делают транслитерацию в excel вручную, а более опытные используют многоэтажные формулы с подстановкой значений.
В этой статье мы научимся создавать небольшую пользовательскую функцию, которая умеет делать транслитерацию в Excel. В данном случае не нужно знать VBA, поскольку текст функции есть в статье, его можно просто скопировать.
Видео для тех, кто не любит читать
Итак, у нас есть таблица с ФИО сотрудников. Нужно сделать транслитерацию этих данных.
1. Нажмем клавиши Alt + F11, чтобы перейти в редактор Visual Basic.
2. В окне редактора Visual Basic перейдем в меню Insert — Module
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. Перейдите на вкладку меню Формулы — Вставить функцию.
7. В выпадающем списке Категория выберите Определенные пользователем.
8. Созданная для транслитерации функция называется Translit. Выделите ее и нажмите Ок.
9. Установив курсор в поле Txt, щелкните по первой ячейке, для которой нужно сделать транслитерацию. Нажмите Ок.
10. Скопируйте формулу до конца списка, потянув за нижний правый уголок выделенной ячейки. Транслитерация в Excel готова.
Теперь транслитерация ячеек excel будет производиться макросом автоматически, достаточно указать или вызвать формулу =Translit(). Это удобно, если у вас большой список слов для транслитерации и вручную сделать это сложно.
Сообщество Excel Analytics | обучение Excel
Канал на Яндекс.Дзен
Как правильно настроить поиск и замену английских букв в русском тексте таблиц 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), то все английские буквы, найденные в выделенных ячейках, будут заменены на равноценные им русские. Только будьте осторожны, чтобы не заменить случайно нужную вам латиницу.
Как в русском тексте в Excel или Word быстро найти английскую букву? И наборот
Чтобы в русском или, правильнее будет сказать, в кириллическом тексте в Excel или Word быстро найти английскую букву,
измените шрифт на Algerianи латинские символы будут выделены жирным:
Соответственно, для противоположной задачи, то есть для поиска русских символов, точно также меняем шрифт
и русские буквы в тексте останутся нежирными:
Задачу поиска в выделенном диапазоне ячеек кириллических символов также решает такой небольшой макрос для Microsoft Excel:
Результат работы макроса:
О том, как создать и использовать макросы, читайте здесь.
Как найти латиницу и кириллицу в таблице
Поступил очень интересный вопрос от одного из зрителей — как в таблицах Excel искать латинские и кириллические символы?
Ответ прост — мы напишем небольшой макрос (на самом деле можно было бы обойтись и формулой, но её размер вряд ли был бы меньше текста самого макроса).
Открываем вкладку «Разработчик», затем вставляем модуль (Insert->Module), в него добавляем следующий текст:
Sub Показать_латиницу()
‘показать латиницу
Dim c As Range, i As Long
For Each c In Selection
For i = 1 To Len(c)
If Mid$(c, i, 1) Like «[A-Za-z]» Then c.Characters(Start:=i, Length:=1).Font.ColorIndex = 4
Next i, c
End Sub
В данном макросе нужно знать следующее — «с» (это символ), «i» -это количество символов в строке (диапазоне), «For Each c In Selection» — для каждого символа в выделении (обратите своё внимание в выделенном диапазоне!), «If Mid$(c, i, 1) Like «[A-Za-z]» Then c.Characters(Start:=i, Length:=1).Font.ColorIndex = 4″ — это условие при котором любой символ с A-Z и a-z будет подсвечен зелёным цветом, «Next i, c» — следующие символы в диапазоне.
Снова вставляем модуль и размещаем текст макроса для него.
Sub Показать_кириллица()
‘показать кириллицу
Dim c As Range, i As Long
For Each c In Selection
For i = 1 To Len(c)
If Mid$(c, i, 1) Like «[А-Яа-я]» Then c.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
Next i, c
End Sub
Всё то же самое за исключением букв и цвета (3 — это красный цвет). Для того, чтобы вставить кнопки (как в примере) нужно на вкладке «Разработчик» нажать кнопку «Вставить» и выбрать значение «Кнопка», а потом назначить кнопкам нужный макрос (щелчок правой кнопкой мышки по кнопке и выбор «Назначить макрос»).
Если что-то непонятно — смотрим видео!
Просмотров: 235
Ставим задачу.
При получении данных из таблиц с помощью ВПР или ИНДЕКС важное значение имеет тип данных и языковая раскладка, с помощью которой набрано название. И если для смены типа можно использовать встроенные функции Excel, то с шрифтом все не так просто. По крайней мере, если решать задачу в лоб, то формула получится достаточно громоздкой.Давайте рассмотрим, как выполняется замена символов в VBA.
Давайте решим эту проблему, используя возможности VBA, или – проще – возможности макросов.
Написание основного кода.
Вначале попробуем определить, какие именно знаки латинского алфавита похожи на русский и запишем их в виде строки
Получаем такой код
Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”
Как видим, таких знаков не так уж и много
Добавим соответствующие им символы кириллицы
Dim RusStr As String: RusStr = “ЕеОоРрАаХхСсМТНКВ”
Напоминаю, в первой строке все буквы латинские (английские, если вам так проще), а во второй – кириллица, то есть русские. Названия произвольны. Обратите внимание, что знаки, похожие по написанию, находятся на одинаковых местах. Логика тут следующая. Если один из знаков проверяемого текста совпадает с знаком из строки LatStr, то надо взять аналогичный знак из RusStr
Для этого назначим для проверяемой строки переменную TestString. К примеру, возьмем его из текущей ячейки
Dim TestString as string: TestString=ActiveCell.Value
После этого начнем по очереди сравнивать каждый символ полученной строки с латиницей из LatStr.
Запускаем цикл для получения очередного знака из TestString.
Вначале объявим переменные хранения счетчиков циклов, а также очередных знаков из TestString и LatStr. Так же зададим переменную типа строка для результата обработки NewString
Dim b as integer, J as integer, sValue as string, s1 as string, NewString as string
Запустим сам цикл
For j=1 to Len(TestString)
sValue=Mid(TestString,j,1)
Теперь начнем так же в цикле сравнивать его со знаками из LatStr. Если такой знак отыщется, то меняем найденный символ на соответствующий знак из RusStr.
For b=1 to Len(LatStr)
S1=mid(LatStr,b,1)
If s1=SValue then SValue=Mid(RusStr,b,1)
Закрываем цикл сравнения и вернемся к проверке очередного знака.
Next b
В итоге, если буква была латинской, она заменится на соответствующую по написанию русскую, если нет – знак остается прежним. Добавим полученный результат к некоей строке NewString. Изначально наша переменная, как и любая другая, будет пустой, но после каждого прохождения цикла тестирования к ней будет добавляться очередной символ
NewString=NewString & sValue
И закрываем цикл извлечения
Next j
Собираем код вместе.
В результате получили такой итоговый код
Dim TestString as string: TestString=ActiveCell.Value
Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”
Dim RusStr As String: RusStr = “ЕеОоРрАаХхСсМТНКВ”
Dim b as integer, J as integer, sValue as string, s1 as string
For j=1 to Len(TestString)
sValue=Mid(TestString,j,1)
For b=1 to len(LatStr)
S1=mid(LatStr,b,1)
If s1=sValue then sValue=Mid(RusStr,b,1)
Next b
NewString=NewString & sValue
Next j
Отступы могут быть произвольными, можно вообще обойтись без них, но так проще отследить, что же происходит на участках кода
Где же применить полученный код? Лично я вижу два варианта.
Создаем пользовательскую функцию – UDF.
Первый – обернуть строки кода в виде функции. Например, создать пустой файл Excel, открыть в нем редактор VBA, используя нажатие сочетания “Alt F11” и дать команду
«Insert» → «module!»
В открывшемся окне вставляем следующую строку
Public Function LatinToRus (TestString as Variant) as string
Редактор автоматически создаст основу или – как принято это называть – каркас для функции, добавив строку End Function. После этого добавим полученный нами выше код перед строкой End Function. Первую строку кода пропускаем – мы задаем TestString как параметр – исходные данные – для нашей функции. Завершим все добавлением строки
LatinToRus=NewString
Результат получится таким
Public Function LatinToRus (TestString as Variant) as string
Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”
Dim RusStr As String: RusStr = “ЕеОоРрАаХхСсМТНКВ”
Dim b as integer, J as integer, sValue as string, s1 as string
For j=1 to Len(TestString)
sValue=Mid(TestString,j,1)
For b=1 to len(LatStr)
S1=mid(LatStr,b,1)
If s1=Svalue then Svalue=Mid(RusStr,b,1)
Next b
NewString=NewString & sValue
Next j
LatinToRus=NewString
End Function
Название функции естественно может быть произвольным.
Сохраним файл с функцией как надстройку Excel.
Теперь сохраним наш файл как надстройку Excel в формате Xlam. Excel сам автоматически выберет место для хранения надстройки. Если же вы хотите сохранить ее резервную копию, дайте команду «Сохранить как» ещё раз . После этого сделайте копию, к примеру, на рабочем столе
Теперь перейдем по пути
Файл → параметры → Надстройки → надстройки Excel → перейти
И отмечаем нашу надстройку флажком
После этого функция станет доступной во всех файлах Excel для текущего пользователя в категории «Определенные пользователем»
А вот и пример использования.
Обратите внимание на формулы. Очевидно, что после применения функции LatinToRus были найдены все слова по образцам.
Используем создание процедуры.
Второй способ применения – использование созданного кода в виде процедуры, например, для ячеек выделения. Такую процедуру удобнее добавить в личную книгу макросов. Изначально доступ к ней запрещен, поэтому пойдем на хитрость. Запустим запись макроса с вкладки «Вид»
Укажем хранение макроса в личной книге, после чего сразу остановим запись
Снова запускаем редактор VBA и открываем текст модуля из личной книги.
Удаляем строки Sub Макрос1 () и End Sub а так же все что Excel добавил между ними и вставляем следующий код
Sub Change_Latin_To_Rus()
Dim LatStr As String: LatStr = “EeOoPpAaXxCcMTHKB”
Dim RusStr As String: RusStr = “ÅåÎîÐðÀàÕõÑñÌÒÍÊ”
Dim b As Integer, J As Integer, sValue As String, s1 As String
Dim TestString As String
For Each MyCells In Selection
NewString = “”
TestString = MyCells.Value
For J = 1 To Len(TestString)
sValue = Mid(TestString, J, 1)
For b = 1 To Len(LatStr)
s1 = Mid(LatStr, b, 1)
If s1 = sValue Then sValue = Mid(RusStr, b, 1)
Next b
NewString = NewString & sValue
Next J
MyCells.Value = NewString
Next MyCells
End Sub
Теперь достаточно выделить нужный диапазон, нажать сочетание Alt F8 и выбрать нашу процедуру.
Замена символов в VBA произойдет автоматически во всех выделенный ячейках. И наконец ,если вам надо наоборот поменять русские буквы в латинице, то просто поменяйте местами в циклах LatStr и RusStr то есть сделайте так
For b=1 to len(RusStr)
S1=mid(RusStr,b,1)
If s1=Svalue then Svalue=Mid(LatStr,b,1)
Next b
Подведем итоги.
Никто не мешает добавить символы, к примеру, заменить знак нуля на заглавную букву «О». то есть дальнейшее уже зависит от вашей фантазии. Как видите, замена символов в VBA не такое уж сложное дело. Нужно только желание. Пробуйте, экспериментируйте. На этом все, встретимся на занятиях. Всем внимательности и упорства, а результат не заставит себя ждать.