Есть ли способ определения языка строки средствами VBA? Например в коде есть 2 строки, которые нужно сравнить по языку (одинаковы ли языки двух строк) В файле примере 2 ячейки для сравнения. В первой ячейке первая буква английская, вторая вся на русском.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Выведет false, ибо xl внешним сходством символов не обманешь. Если вам нужно лишь понимать, что значения неидентичны, то этого выражения достаточно. Если же вам именно нужно узнать язык, то необходимо по диапазонно искать совпадения, как сделал Jack Famous, только для всех возможных диапазонов символов. Можно ещё попробовать в google translate отправить, он сам определит язык (правда этот вариант чисто поржать)
можно заменить латиницу на визуально похожую кириллицу и сравнивать как обычно — я на работе постоянно так делаю, потому что латинская СИ и кириллическая ЭС даже на одной клавише находятся (спасибо оленям-внедренцам) и человек, удаляя неправильно напечатанное (в другой раскладке), как правило СИ не удаляет, потому что "она нормальная"
Здесь есть форма, которая позволяет быстро и удобно посмотреть коды всех символов активной ячейки
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Рекомендую использовать указанный по ссылке подход в следующей редакции.
Код
' Раскрашивает в Selection в красный цвет буквы, не относящиеся к русскому алфавиту
Sub ShowNotRussian()
Dim r As Range, i As Long, t As String, v
Application.ScreenUpdating = False
For Each r In Intersect(Selection, Selection.Parent.UsedRange).Cells
v = r.Value
If VarType(v) = vbString Then
For i = 1 To Len(v)
t = Mid(v, i, 1)
If LCase(t) <> UCase(t) And Not LCase(t) Like "[а-яё]" Then r.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
Next i
End If
Next r
Application.ScreenUpdating = True
End Sub
Аналогично для латыни.
Далее можно использовать автофильтр по цвету текста и выделить все опечaтки (кстати, есть в этом тексте).
Э, Э? клавиатуру печатной машинки придумали не просто так, а выверенная схематика по частоте употребления символов и прочего. Двуязычных тогда не было, а на печати все равно латинская СИ и кириллическая ЭС выглядят одинаково. А переделывать - это как в Англии сейчас ввести левый руль.
Перевели летчика в эскадрилию гидропаланов. Первsй полет, все нормально, выполнил задание , возвращается на базу и по пути начинает садится на обычныq аэродром. Штурман и второй пилот с воплями ты куда ???? . Все обошлось подняли в воздух, долетели до водоема, сели. Пилот вышел из кабины , обернулся на бледных сослуживцев, "Извините мужики , сила привычки!" и спрыгнул с крыла .... .
1. Несмотря на краткость шаблон String Like "*[A-Za-z]*" быстрее (в крайнем случае, не медленнее) перечисления "похожих" (в комментариях MCH как раз его и предложил) 2. Перед циклом по символам строки ОБЯЗАТЕЛЬНО нужно проверить строку на наличие этих символов. Проверка из п.1 ОЧЕНЬ быстрая, а цикл по символам ОЧЕНЬ медленный (у вас нет такой проверки) 3. Можно ещё ускорить: регулярками извлечь латиницу и искать каждый символ из извлечённых InStr'ом
Итого: проверяем наличие Like'ом, извлекаем регулярками и красим "точечно". Всё вместе будет гораздо быстрее
БМВ, что там когда и как было меня мало волнует. От того, что это обосновано, ошибок ввода меньше не стало, сдвинуть или переставить можно легко - большинству плевать, так как машинистки со своим "слепым десятипальцевым методом" никому уже лет 20 как не нужны (привет распознавание голоса в текст) А анекдот хороший, спасибо
UPD
По твоей (и не только) логике "так исторически сложилось", что всё пошло от печатных машинок — тогда почему частота символов не соответствует? По идее, на самых частых символах латиницы должны быть самые частые символы кириллицы, а это не так. Аргумент "мы привыкли" очень много хорошего запорол уже
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Off В свое время литер отличались, да и сейчас можно найти шрифты, которые дают различие, но системные к ним не относятся, а зря. но ! i l | могут приносить чуть меньше хлопот, O и ноль, который больше не перечеркивается . Но С конечно лидер, расположенный на одной кнопке - тут спору нет.
Цитата
Jack Famous написал: большинству плевать, так как машинистки со своим "слепым десятипальцевым методом" никому уже лет 20 как не нужны (привет распознавание голоса в текст)
оъ как не прав. Конечно все шагнудо вперед, но не на столько , чтоб исключить ошибки. Этой записи лет 15 наверно, и по реакции оператора это не инсценировка.
Здравствуйте, Алексей! Макрос из #9 выделяет цветом все буквы, не относящиеся к русскому алфавиту. Кроме латыни, в Unicode есть еще много-много букв из разных алфавитов (греческие, расширенная латынь, арабские и т.д.).
Вот тут приколы начинаются, если кодировку с кириллицы на юникод сменить (или другие варианты). I вполне запросто становится |. Через раз с этим сталкиваюсь при импорте данных из txt в mysql. Та ещё головная боль
artemkau88 написал: Способы определения языка строки VBA
строки Pronto Achtung это один язык? (как по мне это итальянский и немецкий) а что вы тут определяете? а фраза: "McDonalds у Києві репрезентовано за 42 різними адресами" это какой язык?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
sokol92: все буквы, не относящиеся к русскому алфавиту
Код
If String like "*[!ЁёА-я]*"
изи)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: все буквы, не относящиеся к русскому алфавиту
)) пательня все буквы относятся к русскому алфавиту? а язык какой? (и что слово значит) какой язык и как вы пытаетесь помочь определить автору? о каких языках речь?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Алексей, буквы См и ЭС на одной клавише не только на клавиатурах ПК расположены: на телетайпах (а они двуязычные) картина аналогичная. И, как правильно написал Миша, это сделали не из вредности: изначально во главу угла ставилась частота использования. Но этого оказалось мало: при росте скорости печати (в те времена) столкнулись с проблемой, что соседние рычаги печатной машинки при большой скорости набора цеплялись друг с другом и некоторые буквы пришлось разносить подальше друг от друга, пытаясь найти компромисс. Так что не "с потолка" появилась такая раскладка. А потом сработала преемственность: человеку уже было привычно искать нужный символ на клавиатуре ПК в том месте, где он был на печатной машинке и на телетайпе. Кстати, на первых ЭВМ роль клавиатуры выполнял именно телетайп. Он же выполнял роль принтера. ) Алексей, ну не знали в те далёкие времена, что тебе будет напревать )) Ты уж не серчай на них - люди старались
Юр, а как ты думаешь, много ли людей, привычных к машинке, работает на клавиатуре? Из моих знакомых - ни одного. А проблемы создаёт буквально на ровном месте
Смысла обсуждать "правильность" не вижу - если не нравится, то можно купить другую клавиатуру, они есть. А всех за другую клавиатуру не посадишь, а значит проверять всё-равно надо За историю наследования спасибо))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄