Страница 1 из 1

Отделить руские слова от английских слов

Добавлено: 10 мар 2005, 13:48
Кесарь
Как отделить в ячейке руские от английских слов

Добавлено: 10 мар 2005, 14:47
Игорь Акопян
как хочется их отделять? прочто вырезать всё что написано не по-английски?

Добавлено: 10 мар 2005, 14:58
Кесарь
из 3000 тысяч ячеек

Добавлено: 10 мар 2005, 21:11
Naeel Maqsudov
Кесарь, Игорь Акопян очевидно интересовался что должно получитсья в итоге. Допустим в ячейке есть слова на разных языках. После "отделения" что должно получиться? Например: должны остаться только английские слова.

А по поводу алгоритма могу сказать следующее:
Если допустить, что каждое слово содержит внутри только символы принадлежащие только одному алфавиту, то все деление на 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
Для 3000 ячеек перепишите сами по вкусу.

Добавлено: 10 мар 2005, 21:47
Naeel Maqsudov
Кесарь, не нужно дублировать темы. Аналогичнют тему я удалил.

Вы пытаетесь, как я понял, использовать только стандартные средства (функции работы со строками). Увы, на сколько мне известно нет функций поиска операющихся на метасимволы оператора 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
Теперь эта функция по составу параметров полностью аналогична функции НАЙТИ