Страницы: 1
RSS
Проверка ячейки на наличие в ней текста на русском языке
 
Доброго времени суток!
Прошу помощи:
В ячейках имеется текст (набор букв и цифр-серийные номера машин) на английском и русском языке.
Можно ли использовать какую то функцию, чтобы проверить есть ли в ячейке буквы (слова) на русском языке?
Заранее спасибо.
 
 
Можно использовать UDF, например такую:
Код
Function MixRus(txt As String)
    Dim TxtU As String
    TxtU = UCase(txt)
    MixRus = IIf(TxtU Like "*[А-ЯЁ]*", txt, "")
End Function
выведет строку, в которой есть кириллица.
 
Немного переделаю UDF от Hugo:
Код
Function ContainsRussian(txt As String)
    ContainsRussian = IIf(TxtU Like "*[А-ЯЁ]*", "Есть русские буквы", "Нет русских букв")
End Function
There is no knowledge that is not power
 
UCase() нужно бы добавить, хотя если в тех номерах и так все прописные, то ошибки не будет. Если исправить конечно переменную :)
Код
Function ContainsRussian(txt As String)
    ContainsRussian = IIf(UCase(txt) Like "*[А-ЯЁ]*", "Есть русские буквы", "Нет русских букв")
End Function
Изменено: Hugo - 27.07.2016 11:32:12
 
Цитата
Hugo написал: Можно использовать UDF,
Спасибо)
 
Как-то столкнулся с подобной задачей... пришёл в голову такой вариант... Исследуемый текст в ячейке А1.
Формула массива: =ИЛИ(ABS(КОДСИМВ(ПСТР(ПРОПИСН(A1);СТРОКА(ИНДЕКС(C:C;1):ИНДЕКС(C:C;ДЛСТР(A1)));1))-{207,5;168})<{16;1})
Вместо столбца C:C можно можно подставить любой другой столбец.

Логика работы формулы такая:
1. Преобразуем все буквы в заглавные для упрощения.
2. Смещаемся на середину кодов заглавных букв русского языка. Поскольку подряд идущих символов 32 (буква Ё размещена в другом месте), то позиция середины - это 16,5. Прибавляем код первого символа минус единицу -- получаем 207,5 (=191 + 16,5).
3. Отнимаем от исследуемых кодов эту цифру (207,5). При этом, для букв от А до П результат будет отрицательный, для букв от Р до Я положительный.
5. Берём модуль и сравниваем результат с размером диапазона, делённым на два (16). Таким образом мы захватываем 32 буквы  (по 16 сверху и снизу от середины 207,5)
6. Букву Ё формула проверит по тому же правилу. Её код 168, кол-во символов - один.
7. Если хоть одно из условий истинно, ИЛИ вернёт ИСТИНУ.

Для украинского языка (для включения букв Ґ, Є, Ї, І) если при этом не исключать из диапазона русские букв буквы Ъ,Э,Ы, константы будут такие:
... -{207,5;165;170;175;178})<{16;1;1;1;1})
В идеале, буквы Ъ, Ы, Э нужно исключать. Исключим их вместе с "Ь", поскольку их коды идут подряд, а "Ь" потом проверим отдельно:
... -{204,5;222,5;165;170;175;178;220})<{13;1;1;1;1;1;1})

Для того, чтобы проверить, есть ли в тексте цифры, формула массива будет такой: =ИЛИ(ABS(КОДСИМВ(ПСТР(ПРОПИСН(A1);СТРОКА(ИНДЕКС(B:B;1):ИНДЕКС(B:B;ДЛСТР(A1)));1))-52,5)<5)

Файл-пример прилагается.
 
А если так? для анализа a1 .Массивная
Код
=IFERROR(OR(CODE(MID(LOWER(A1);ROW($A$1:INDEX($A:$A;LEN(A1)));1))>223);"")
или так не массивная
Код
=IFERROR(SUMPRODUCT(--(CODE(MID(LOWER(A1);ROW($A$1:INDEX($A:$A;LEN(A1)));1))>223))>0;"")
Изменено: БМВ - 28.11.2017 00:22:02
По вопросам из тем форума, личку не читаю.
 
Код
Sub Цветом_РУС_LAT()   ' Выделяет в выделенных ячейках русские символы - ЗЕЛЁНЫМ, латинские - КРАСНЫМ http://www.excelworld.ru/forum/3-236-1
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Intersect(Selection, ActiveSheet.UsedRange) Is Nothing Then Exit Sub
    Dim rCell As Range, i%, ASCII%, iColor%
    Application.ScreenUpdating = False
    For Each rCell In Intersect(Selection, ActiveSheet.UsedRange)
    For i = 1 To Len(rCell)
        ASCII = Asc(Mid(rCell, i, 1))
        If (ASCII >= 192 And ASCII <= 255) Or ASCII = 168 Or ASCII = 184 Then iColor = 10   'цвет символов РУС
        If (ASCII >= 65 And ASCII <= 90) Or (ASCII >= 97 And ASCII <= 122) Then iColor = 3   'цвет символов LAT
        rCell.Characters(Start:=i, Length:=1).Font.ColorIndex = iColor
    Next i
    Next rCell
    Application.ScreenUpdating = True
    Intersect(Selection, ActiveSheet.UsedRange).Select
End Sub
C уважением, Влад!
 
В "Приемах" статья
Страницы: 1
Читают тему
Наверх