Всем привет! Есть ли способ определения языка строки средствами VBA? Всем большое спасибо! Изменено: vikttur — 26.08.2021 12:02:06 |
|
vikttur Пользователь Сообщений: 47199 |
Проверить коды первых символов Изменено: vikttur — 26.08.2021 12:03:38 |
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#3 26.08.2021 12:24:20 artemkau88, здравствуйте
Изменено: Jack Famous — 26.08.2021 12:32:02 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|||||
Jack Famous, vikttur, большое спасибо! |
|
No Name Пользователь Сообщений: 41 |
#5 27.08.2021 15:34:14 В вашем примере следующий код
Выведет false, ибо xl внешним сходством символов не обманешь. Если вам нужно лишь понимать, что значения неидентичны, то этого выражения достаточно. Если же вам именно нужно узнать язык, то необходимо по диапазонно искать совпадения, как сделал Jack Famous, только для всех возможных диапазонов символов. Можно ещё попробовать в google translate отправить, он сам определит язык (правда этот вариант чисто поржать) |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#6 27.08.2021 16:00:23
можно заменить латиницу на визуально похожую кириллицу и сравнивать как обычно — я на работе постоянно так делаю, потому что латинская СИ и кириллическая ЭС даже на одной клавише находятся (спасибо оленям-внедренцам) и человек, удаляя неправильно напечатанное (в другой раскладке), как правило СИ не удаляет, потому что «она нормальная» Здесь есть форма, которая позволяет быстро и удобно посмотреть коды всех символов активной ячейки Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
sokol92 Пользователь Сообщений: 4445 |
См. эту статью и комментарии к ней. |
Изменено: artemkau88 — 27.08.2021 16:49:18 |
|
sokol92 Пользователь Сообщений: 4445 |
#9 27.08.2021 17:36:11 Рекомендую использовать указанный по ссылке подход в следующей редакции.
Аналогично для латыни. Далее можно использовать автофильтр по цвету текста и выделить все опечaтки (кстати, есть в этом тексте). Изменено: sokol92 — 27.08.2021 17:44:43 Владимир |
||
БМВ Модератор Сообщений: 21380 Excel 2013, 2016 |
#10 27.08.2021 17:46:47 Off
Э, Э? клавиатуру печатной машинки придумали не просто так, а выверенная схематика по частоте употребления символов и прочего. Двуязычных тогда не было, а на печати все равно латинская СИ и кириллическая ЭС выглядят одинаково. А переделывать — это как в Англии сейчас ввести левый руль. Перевели летчика в эскадрилию гидропаланов. Первsй полет, все нормально, выполнил задание , возвращается на базу и по пути начинает садится на обычныq аэродром. Штурман и второй пилот с воплями ты куда ???? . Все обошлось подняли в воздух, долетели до водоема, сели. Пилот вышел из кабины , обернулся на бледных сослуживцев, «Извините мужики , сила привычки!» и спрыгнул с крыла …. . По вопросам из тем форума, личку не читаю. |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#11 27.08.2021 17:51:34 sokol92, приветствую!
БМВ, что там когда и как было меня мало волнует. От того, что это обосновано, ошибок ввода меньше не стало, сдвинуть или переставить можно легко — большинству плевать, так как машинистки со своим «слепым десятипальцевым методом» никому уже лет 20 как не нужны (привет распознавание голоса в текст)
Изменено: Jack Famous — 27.08.2021 18:12:08 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
БМВ Модератор Сообщений: 21380 Excel 2013, 2016 |
#12 27.08.2021 18:29:52 Off
оъ как не прав. Конечно все шагнудо вперед, но не на столько , чтоб исключить ошибки. Этой записи лет 15 наверно , и по реакции оператора это не инсценировка. По вопросам из тем форума, личку не читаю. |
||
sokol92 Пользователь Сообщений: 4445 |
Здравствуйте, Алексей! Макрос из #9 выделяет цветом все буквы, не относящиеся к русскому алфавиту. Кроме латыни, в Unicode есть еще много-много букв из разных алфавитов (греческие, расширенная латынь, арабские и т.д.). |
No Name Пользователь Сообщений: 41 |
#14 27.08.2021 18:38:19
Вот тут приколы начинаются, если кодировку с кириллицы на юникод сменить (или другие варианты). I вполне запросто становится |. Через раз с этим сталкиваюсь при импорте данных из txt в mysql. Та ещё головная боль |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#15 27.08.2021 19:17:30
строки Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#16 27.08.2021 21:49:45
изи) Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#17 27.08.2021 22:06:32
)) Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Юрий М Модератор Сообщений: 60581 Контакты см. в профиле |
Алексей, буквы См и ЭС на одной клавише не только на клавиатурах ПК расположены: на телетайпах (а они двуязычные) картина аналогичная. И, как правильно написал Миша, это сделали не из вредности: изначально во главу угла ставилась частота использования. Но этого оказалось мало: при росте скорости печати (в те времена) столкнулись с проблемой, что соседние рычаги печатной машинки при большой скорости набора цеплялись друг с другом и некоторые буквы пришлось разносить подальше друг от друга, пытаясь найти компромисс. Так что не «с потолка» появилась такая раскладка. А потом сработала преемственность: человеку уже было привычно искать нужный символ на клавиатуре ПК в том месте, где он был на печатной машинке и на телетайпе. Кстати, на первых ЭВМ роль клавиатуры выполнял именно телетайп. Он же выполнял роль принтера. ) Изменено: Юрий М — 28.08.2021 00:04:01 |
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Юр, а как ты думаешь, много ли людей, привычных к машинке, работает на клавиатуре? Из моих знакомых — ни одного. А проблемы создаёт буквально на ровном месте Смысла обсуждать «правильность» не вижу — если не нравится, то можно купить другую клавиатуру, они есть. А всех за другую клавиатуру не посадишь, а значит проверять всё-равно надо Изменено: Jack Famous — 29.08.2021 10:56:04 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Юрий М Модератор Сообщений: 60581 Контакты см. в профиле |
#20 29.08.2021 11:00:39
Теперь есть один ) |
||
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#21 29.08.2021 11:33:02
сковородка, язык украинский.
|
|||
- Найти латиницу в 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 поможет решить их быстро и легко!
It is a petty that you cannot request the language of the user. It is not only needed in date-format functions, many times we need to know the languange in indirect-functions as well. All indirect parts of formulas (which are used between quotes) is fixed text, while formulas are automatically ‘translated’ to the users language. For parts in a formula which is between quotes (like a format of a date), excel has no solution.
So we cannot request the language, however, from Excel 2016 and above, there is a possibility to get a formula in text. The English name of that function is FORMULATEXT (please find the translated function name of your own language).
This means that we can use this function to create our own way to detect a language. If you wnat to create an international sheet, it is a lot of work, but of you only need to support 2 or 3 languages, it can be used.
Place in Cell A1 the formula:
=IF(A2>20,A2,A2)
This formula doesn’t do anything.
Place in Cell A2 the formula:
=MID(LEFT(FORMULATEXT(A1),FIND(«(«,FORMULATEXT(V2))-1),2,20)
Now we know the language. If cell A2=»IF», the language is English, if it is «WENN» it is German, if it is «COMME» it is French and if it is «ALS» it is Dutch, etc.
Be aware that if you have users with older versions of excel, this function isn’t available and you cannot detect the language (at least not in this way). I added an ISERROR to this. In case of an error (older versions), I only support Dutch (in my case )
20 / 6 / 1 Регистрация: 06.03.2010 Сообщений: 74 |
|
1 |
|
Определить язык приложения21.05.2010, 08:41. Показов 3202. Ответов 2
Подскажите, пожалуйста, как определить текущий язык в Экселе.Нужно определять текущий язык ввода до того, как какие либо символы будут введены, т.е. просто алфавит анализировать не вариант
0 |
EducatedFool 0 / 0 / 0 Регистрация: 28.09.2009 Сообщений: 88 |
||||
22.05.2010, 02:11 |
2 |
|||
А вот пример в виде файла: http://excelvba.ru/XL_Files/Sa… -11-38.zip
0 |
20 / 6 / 1 Регистрация: 06.03.2010 Сообщений: 74 |
|
22.05.2010, 09:55 [ТС] |
3 |
Спасибо!Честно говоря, со всякими API и подобным с вызовом из библиотек не работал никогда.Круто!
0 |
Private Declare Function GetKeyboardLayoutName _ Lib "user32" Alias "GetKeyboardLayoutNameA" _ (ByVal pwszKLID As String) As Long Private Declare Function ActivateKeyboardLayout _ Lib "user32" (ByVal HKL As Long, _ ByVal flags As Long) As Long Sub ChangeKeyboardLayout() Dim KeybLayoutName As String, iState As Integer KeybLayoutName = String(9, 0) GetKeyboardLayoutName KeybLayoutName '409 - английская, '419 - русская 'получение значения текущей раскладки iState = Val(CStr(CLng(Left$(KeybLayoutName, InStr(1, KeybLayoutName, Chr(0)) - 1)))) Select Case iState Case 409 MsgBox "Текущая раскладка Английская! Сменим на русскую!", 64, "" Case 419 MsgBox "Текущая раскладка Русская! Сменим на английскую!", 64, "" Case Else MsgBox "Текущая раскладка какая-то другая! Менять не будем", 64, "" End Select 'Переключение раскладки с русскую на английскую If iState = 419 Then ActivateKeyboardLayout 0, 0 End If 'Переключение раскладки с английской на русскую If iState = 409 Then ActivateKeyboardLayout 0, 0 End If End Sub