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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Кесарь
Сообщения: 2
Зарегистрирован: 10 мар 2005, 11:56
Откуда: Екатеринбург

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

как хочется их отделять? прочто вырезать всё что написано не по-английски?
Изображение
Кесарь
Сообщения: 2
Зарегистрирован: 10 мар 2005, 11:56
Откуда: Екатеринбург

из 3000 тысяч ячеек
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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

А по поводу алгоритма могу сказать следующее:
Если допустить, что каждое слово содержит внутри только символы принадлежащие только одному алфавиту, то все деление на 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 ячеек перепишите сами по вкусу.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Кесарь, не нужно дублировать темы. Аналогичнют тему я удалил.

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