Отделить руские слова от английских слов
Модератор: Naeel Maqsudov
Как отделить в ячейке руские от английских слов
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
как хочется их отделять? прочто вырезать всё что написано не по-английски?

из 3000 тысяч ячеек
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Кесарь, Игорь Акопян очевидно интересовался что должно получитсья в итоге. Допустим в ячейке есть слова на разных языках. После "отделения" что должно получиться? Например: должны остаться только английские слова.
А по поводу алгоритма могу сказать следующее:
Если допустить, что каждое слово содержит внутри только символы принадлежащие только одному алфавиту, то все деление на 2, 3... N языков можно проводить в один проход.
Для 3000 ячеек перепишите сами по вкусу.
А по поводу алгоритма могу сказать следующее:
Если допустить, что каждое слово содержит внутри только символы принадлежащие только одному алфавиту, то все деление на 2, 3... N языков можно проводить в один проход.
Код: Выделить всё
Sub aaa()
Dim r As Range
Set r = ActiveCell
ru = ""
en = ""
For i = 1 To r.Characters.Count
ch = r.Characters(i, 1).Text
Select Case LCase(ch)
Case "a" To "z"
en = en + ch
Case "а" To "я" ' тут русская А
ru = ru + ch
Case Else
en = en + ch
ru = ru + ch
End Select
Next
r.Next.Value = Trim(ru)
r.Next.Next.Value = Trim(en)
End Sub
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Кесарь, не нужно дублировать темы. Аналогичнют тему я удалил.
Вы пытаетесь, как я понял, использовать только стандартные средства (функции работы со строками). Увы, на сколько мне известно нет функций поиска операющихся на метасимволы оператора Like. Т.е. нельля найти первую позицию, в которой встречается русская буква. Однако, такую альтернативную функцию вполне можно написать.
Теперь
=Найти2("[а-я]") покажет позицию, где начинается серия русских букв
=Найти2("[а-я][а-я]") покажет первую позицию, где втречаются две подряд русские буквы
=Найти2("[а-я]#[!a-z]") - позицию русской буквы за которой следует цифра, после которой в свою очередь не следует латинская буква
Поиск зависит от регистра, но это легко исправить сделав, например,
What = LCase(What) и Where = LCase(Where) в начале функции
Также легко добавить поиск не с начала а с определенной позиции
Теперь эта функция по составу параметров полностью аналогична функции НАЙТИ
Вы пытаетесь, как я понял, использовать только стандартные средства (функции работы со строками). Увы, на сколько мне известно нет функций поиска операющихся на метасимволы оператора Like. Т.е. нельля найти первую позицию, в которой встречается русская буква. Однако, такую альтернативную функцию вполне можно написать.
Код: Выделить всё
Function Найти2(ByVal What As String, ByVal Where As String) As Long
Найти2 = -1
For i = 1 To Len(Where)
If Mid(Where, i) Like What + "*" Then
Найти2 = i
Exit For
End If
Next
End Function
=Найти2("[а-я]") покажет позицию, где начинается серия русских букв
=Найти2("[а-я][а-я]") покажет первую позицию, где втречаются две подряд русские буквы
=Найти2("[а-я]#[!a-z]") - позицию русской буквы за которой следует цифра, после которой в свою очередь не следует латинская буква
Поиск зависит от регистра, но это легко исправить сделав, например,
What = LCase(What) и Where = LCase(Where) в начале функции
Также легко добавить поиск не с начала а с определенной позиции
Код: Выделить всё
Function Найти2(ByVal What As String, ByVal Where As String, Optional Start = 1) As Long
Найти2 = -1
For i = Start To Len(Where)
If Mid(Where, i) Like What + "*" Then
Найти2 = i
Exit For
End If
Next
End Function