Страницы: 1
RSS
Как выделить английское слово из ячейки?
 
Помогите, пожалуйста решить проблему. Есть столбец данных со значениями типа: example пример пример; example1 example2 пример. Таких ячеейк в столбце 100 тыс. Как из этого всего выделить в отдельный столбец значениями на английском языке. Другими словами - Как выделить английские слова? Спасибо. Работаю в excel 2010.
 
Давайте ваш пример - строк 20-30, не более, наиболее близкий к оригиналу, и что должно получиться.

Кросс
Изменено: Михаил С. - 29.12.2012 21:08:33
 
UDF
Если будете переносить, то нужно сделать ссылку на библиотеку:
Tools -> References... -> Microsoft VBScript Regular Expressions 5.5.

Или вот портабельная версия:
Код
Function ENGLISH(cell As Range) As String
    
    Dim lCount As Long, i As Long
    Dim s As String
    Dim prefix As String
    Dim re As Object
    Dim mc As Object
    
    Set re = CreateObject("VBScript.RegExp")
    
    re.Pattern = "[a-z]+"
    re.Global = True
    re.IgnoreCase = True
    
    Set mc = re.Execute(cell)
    
    prefix = ", "
    lCount = mc.Count
    
    If lCount > 0 Then
        For i = 0 To lCount - 1
            If i = lCount - 1 Then prefix = ""
            s = s & mc(0) & prefix
        Next
    End If
    
    ENGLISH = s
    
    Set re = Nothing
    Set mc = Nothing

End F unction
Изменено: Johny - 29.12.2012 21:13:32
There is no knowledge that is not power
 
Английские всё время начинаются с первого слова?
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Здесь смотрели?
 
Формула может всё, если её KIM(Игорь) пишет. Но макрос может значительно чуть больше.
;)
-----------------------
=ПСТР(A1;ПОИСКПОЗ(ИСТИНА;ПОИСКПОЗ(КОДСИМВ(ПСТР(A1;СТРОКА($1:$99);1));{65;122})=1;);ПРОСМОТР(2;1/(ПОИСКПОЗ(КОДСИМВ(ПСТР(A1;СТРОКА($1:$99);1));{65;122})=1);СТРОКА($1:$99))-ПОИСКПОЗ(ИСТИНА;ПОИСКПОЗ(КОДСИМВ(ПСТР(A1;СТРОКА($1:$99);1));{65;122})=1;)+1)
------------------------
Думаю, что тут изъянов больше, чем представленный пример.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Английские слова начинаются с первого слова, но их может быть как одно так и 2 или 3 в ячейке, а за ними несколько русских. Прикрепляю пример.Вариант Юрия мне кажется не подойдет, потому что много русских букв он может воспринять как латинские, даже в том примере который дал Юрий видно, "а" "o" и т.д. используется как в латинице так и в кирилице. Ссылка на библиотеку - интересно, попробую. Но думаю, что все должно решаться намного проще...
 
Johny, спасибо. Хороший макрос, но он выделяет только первое английское слово, а если английских слов в исходной ячейке несколько и они разные, он всеравно вместо всех последующих английских слов выделяет первое и копирует его соответствующее количество раз.
 
Цитата
tima1 пишет:
Johny, спасибо. Хороший макрос, но он выделяет только первое английское слово, а если английских слов в исходной ячейке несколько и они разные, он всеравно вместо всех последующих английских слов выделяет первое и копирует его соответствующее количество раз.


Сынок, а ты какой пример показал, на ту тему и написали, реально-настоящее.. В будущем думай, что создать, чтобы ответно получить.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Формула массива:
=ЛЕВСИМВ(A1;МИН(ЕСЛИ(КОДСИМВ(ПСТР(A1&ПОВТОР(" ";50);СТРОКА($1:$50);1))>167;СТРОКА($1:$50)))-3)

Но
Цитата
Таких ячеейк в столбце 100 тыс.
Формула массива на таком массиве  :)  не есть хорошо.
Поэтому лучше макрос.
 
правильная постановка задачи - половина решения.
даже в вашем, мягко говоря, плохом примере, есть слово, написанное через дефис.
что делать в этом случае?
есть устойчивые словосочетания, имеющие смысл именно при совместном использовании слов.
переписывать эти же слова, но через запятую - это значит иметь ноль понимания.
имхо.

а решить-то можно. лишь бы автор задачи понял, что ему нужно  :D
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
Михаил С. пишет:
Кросс
еще: http://www.programmersforum.ru/showthread.php?t=223847

я так не играю   :evil:
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо всем за помощь. Пример нормальный, так как есть слова и с дефисом. Johny, отдельное спасибо. Маленькая доработка макроса и все сработало. Извините, что запостил аж в 3-х форумах и кого-то этим обидел. Не думал, что это плохо. Думал, что разные форумы на то и есть чтобы отвечали в них разные люди и по разному. И самое главное что меньше всего упреков по поводу того что неправильно поставлена задача от тех, кто действительно помог и больше всего от других. Тему закрываю.
Изменено: tima1 - 30.12.2012 11:17:29
 
Цитата
tima1 пишет:
Извините, что запостил аж в 3-х форумах и кого-то этим обидел. Не думал, что это плохо.
Плохо не это - плохо то, что Вы об этом не предупреждаете: если на трёх форумах Вам решат задачу, значит, минимум двое напрасно тратили на Вас своё время.
 
Да, нашёл пару ошибок. Вот, подправил.  :)
Код
Function ENGLISH(cell As Range) As String
    
    Dim lCount As Long, i As Long
    Dim s As String, prefix As String
    Dim re As Object, mc As Object
    
    Set re = CreateObject("VBScript.RegExp")
    
    With re
        .Pattern = "[a-z\d]+" 'Подправил здесь
        .Global = True
        .IgnoreCase = True
    End With
    
    Set mc = re.Execute(cell)
    
    prefix = ", "
    lCount = mc.Count
    
    If lCount > 0 Then
        For i = 0 To lCount - 1
            If i = lCount - 1 Then prefix = ""
            s = s & mc(i) & prefix 'Подправил здесь
        Next
    End If
    
    ENGLISH = s
    
    Set re = Nothing
    Set mc = Nothing

End F unction
Изменено: Johny - 30.12.2012 17:30:45
There is no knowledge that is not power
 
Johny, подскажи, пожалуйста - как сделать чтобы этот макрос работал и для других языков (русский, немецкий, испанский и т.д.)?
 
как вы хотите отличить английские буквы от немецких и многих других? и там и там латиница.
Изменено: V - 08.01.2013 12:28:16
 
Немецкий алфавит:
Aa Bb Cc Dd Ee
Ff Gg Hh Ii Jj
Kk Ll Mm Nn Oo
Pp Qq Rr Ss Tt
Uu Vv Ww Xx Yy
Zz Ää Öö Üü ß

Польский алфавит:
A Ą B C Ć D E Ę F G H I J K L Ł M N Ń O Ó P R S Ś T U W Y Z Ź Ż
Изменено: tima1 - 08.01.2013 12:51:13
 
Пляшем от обратного: если не кириллица, то...
 
Не отличит эксель немецкий язык от английского или какого другого языка, в котором в основе алфавита латиница. Тем боле отдельные слова.. безнадежная затея.
 
tima1!

Интересно, какова реальная цель применения такого алгоритма?
 
Johny, Огромнейшее спасибо за ЛС. Ооооооочень сильно помог. Побольше бы таких людей и специалистов с Большой буквы - и жить было бы легче.
 
Цитата
tima1 пишет:
Johny, Огромнейшее спасибо за ЛС.
Претензии!, как к Johny, так и к tima1.
  1. Johny, если есть решение - почему б не выложить на форум? Интересно многим
  2. tima1, если Вам выложили решение в личке, значит автор по каким либо причинам не хочет выкладывать его для всех, и дальнейшие благодарности - ЛС.
Изменено: Михаил С. - 09.01.2013 17:10:58
 
у меня претензий ни к кому нет, но на будущее, думаю, г-н tima1 обречён обращаться только к Johny, ибо все остальные форумчане - с маленькой буквы и житьё от них трудное.
:D  :D  :D

Johny, мои соболезнования  ;)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Страницы: 1
Наверх