Страницы: 1 2 След.
RSS
Поиск точных совпадений в тексте и вывод значений, поиск в тексте с различным форматом
 
Здравствуйте Уважаемые формучане, прошу помощи, перепробовал много вариантов но ничего не получилось.
Имеется текст находящийся в двух первых колонках и список слов которые нужно найти в тексте и поместить в соседнюю колонку, можно не в одну.
Проблема заключается в том, что в тексте эти слова встречаются в нескольких форматах (одно слово в одной ячейке, в скобках, через запятую, через пробел, в скобках после :, в скобках с цифрами)
единственно, что объединяет эти слова то, что они написаны в верхнем регистре. Буду очень благодарен за помощь.
 
грубо можно так (формула в I2 и протянуть): =ЕСЛИ(СУММПРОИЗВ(--НЕ(ЕОШИБКА(НАЙТИ(H2;$A$2:$B$7))));H2;"")
F1 творит чудеса
 
Не могу вставить эту формулу, руками прописал тоже не получилось.
 
=ЕСЛИ(СУММПРОИЗВ(--ЕЧИСЛО(ПОИСК($H2;$A$2:$B$7)))>0;$H2;"")

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Все равно ругается, может формат книги нужно изменить?
 
registralex, у меня не ругается. Формула обычная. И не надо цитировать подпись - безсмысленно.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
registralex написал: Все равно ругается
локализация офиса какая? Английская?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
да английская
 
прописал предложенную формулу в файле.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist Огромное Вам Спасибо! Бился несколько дней! Скажите а как решать эту проблему с локализацией?
 
Да никак. Если у Вас нет в офисе русского языка, то проблема нерешаемая. Попробуйте зайти в File-Options-Language. Если там нет Russian или его нельзя сделать Set as default, то увы. У Вас лишь один язык.

Да и спасибо мне не за что - я просто взял приведенную уже ранее в теме формулу, вставил в файл. чтобы у Вас формула отобразилась корректно, вот и все. Спасибо поэтому говорите JayBhagavan, а не мне :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Осталась одна проблема если нужно найти например значение Я и эта буква встречается в любом из слов то она появится тоже. Подскажите как можно от этого избавиться?
 
Не писать в списке для поиска букву Я? Ну других вариантов-то нет. Либо искать полное соответствие, либо записывать в строки слова с пробелами и тогда вместе с ними искать. А по другому программа не сделает различия между целым словом и его частью.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А поиск только среди верхнего регистра возможен?
 
=ЕСЛИ(СУММПРОИЗВ(--ЕЧИСЛО(НАЙТИ($H2;$A$2:$B$7)))>0;$H2;"")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
подскажите пожалуйста по поводу полного соответствия как  это реализуется?
 
Как бы...полное соответствие - это когда обе ячейки равны и текст в них полностью совпадает. Я так понимаю для Вашей задачи это вообще не вариант.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
а возможно искать вхождение соответствия и возвращать значение из массива по количеству знаков в искомом слове в колонку i, а потом просто прогнать через впр?
 
доброго времени суток,протестируйте пользовательскую функцию VBA
кнопка test в файл-примере,clean -очистить.
С уважением ко всем участникам обсуждения.
Код
Function zz$(x1$)
Dim t1$, i1&, r1 As Range
i1 = Range("A" & Cells.Rows.Count).End(xlUp).Row
    With CreateObject("VBScript.RegExp")
      For Each r1 In Range("A2:B" & i1)
        t1 = r1.Value: .Pattern = x1
        If .test(t1) Then
           For i = 0 To .Execute(t1).Count - 1
             zz = .Execute(t1)(i).Value
            Exit For
           Next
        End If
      Next
    End With
End Function
 
Спасибо sv2013! Но проблема та-же если нужно наити один символ например К то фунция выдирает его из другого слова, а возможно сделать так чтобы макрос выводил не искомое слово а все символы верхнего регистра не разделенные пробелом, запятой или другим знаком. То есть если маркос нашел К в слове КОТ, он выводит не К а КОТ
 
Пробовал регулярку:
\bСЛОВО\b
почему-то не работает.
ЗЫ Где бы почитать, какие метасимволы именно в ВБА используются. (пока начал изучать эту тему и узнал, что не во всех языках программирования все описанные в книге метасимволы поддерживаются)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Доброе время суток
Вариант функции на регулярных выражениях для поиска первого слова прописными буквами по заданному списку, (думаю, чуть изучив RegExp не составит труда переделать функцию в процедуру для поиска и вывода всех вхождений  ;) )
Успехов.
Цитата
JayBhagavan написал: \bСЛОВО\b
почему-то не работает.
Ограничение \b по границе слова работает, но только если слово состоит из латиницы, так что приходится писать суррогаты для выполнения этого условия.
Изменено: Андрей VG - 12.10.2015 11:09:54 (поправил, а то вдруг цифры буду граничить, и этого будет нельзя ;) )
 
А мне как раз и нужна латиница
 
Цитата
Андрей VG написал: Ограничение \b по границе слова работает, но только если слово состоит из латиницы
Спасибо за объяснение. Теперь всё встало на свои места.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Андрей VG если Вам не тяжело, бросьте пожалуйста вариант для латиницы. Еще полностью не проверил но похоже работает как нужно, Спасибо!
 
Цитата
registralex написал: А мне как раз и нужна латиница
Будьте уж тогда и столь любезны составлять пример максимально похожий на данные, с которыми нужно работать. В прочем, вы можете и сами доработать пример и для текста только из латиницы.

Успехов.
 
Простите за неудобства и потраченное время, я новичек в этом и не сталкивался с функциями VBA до этого, не думал, что язык текста и локализация могут так сильно влиять на решение задачи. В любом случае большое спасибо! Функция решила проблему одиночных символов но она не просматривает весь диапазон а только одну ячейку и поэтому теряются слова которые входят вторыми и далее: SPACE, ME, BLUE, NO, BALL. Переделал фаил на латиницу.
 
подскажите а формулой массива возможно вернуть вхождение найденного слова, или
хотя-бы строку вхождения?
 
Доброе время суток
Переделал, UDF возвращает через пробел все слова, заданные диапазоном wordBase, найденные во входной строке.
Цитата
до этого, не думал, что язык текста и локализация могут так сильно влиять на решение задач
Паттерн написан достаточно универсально, поэтому может работать и с латиницей и с кириллическим диапазоном. Но, сами подумайте в рамках вашей задачи, что является границами слова в вашем предложении, составьте список - он может получиться достаточно большой. Иногда проще пойти обратным путём, указать что является алфавитом для слов, а границей всё что не входит в этот алфавит.

Успехов.
 
Спасибо понял! Странно но почему-то не возвращает слово ME из A7, и если после BALL в B7 через пробел поставить любое слово тоже не вернет, а если перед ним ставить любой знак то возвращает. Странность в том что если слово идет вторым за наиденным через пробел оно не возвращается а если третьим то возвращается.
Возвращает только нечетные значения стоящие через пробел.
Страницы: 1 2 След.
Читают тему
Наверх