Страницы: 1
RSS
Поиск нечетких совпадений в ячейке
 
Доброго времени суток, форум!

Есть такой вот макрос, который пробегает по документу в поисках четких совпадений условия с текстом в ячейке и заполняет соседние столбцы автоматически. Внимание, вопрос: есть возможность средствами VBA реализовать поиск нечетких вхождений, т.е. при поиске "текст" включать в выборку "текст текст" и т.д., "текстовый текст", по типу работы фильтра: "найти" - "содержит" - "заменить"?

Таких "уникальных", отличающихся ничем с точки зрения логики значений порядка 50 000

Код
Sub magic()

    Dim a, b, c As Range
    
    Set a = Range("A1:A30")

    For Each b In a
                    
        If b.Value2 = "Оригинальный текст" Then Cells(b.Row, "B") = "нашлось"
        If b.Value2 = "Тут что-то другое" Then Cells(b.Row, "C") = "тоже нашлось"
        If b.Value2 = "А вот тут тоже текст" Then Cells(b.Row, "D") = "и это нашлось, но это же тоже Оригинальный текст"
    
    Next

    Set a = Nothing

    MsgBox "Все дословные совпадения найдены"
Изменено: Алиса Селезнева - 25.03.2019 15:37:59
Уж больно здесь красиво, жди беды..
 
Я ничего не понял.. Можно привести пример что есть на входе и что должно получиться в результате, а так же алгорим преобразования?
 
InSrt(...) в помощь
Посмотрел файл и то о чем я подумал ушло в небытье. Не понял что вам нужно.
Изменено: V - 25.03.2019 16:09:50
 
Добрый день.
Можно через метод Range.Find реализовать. Ищем вхождение чего-то конкретного в значения ячеек, правильно?
Кому решение нужно - тот пример и рисует.
 
Цитата
Пытливый написал:
Ищем вхождение чего-то конкретного в значения ячеек, правильно?
да, все верно!

Цитата
Alexey_Spb написал:
Я ничего не понял
Цитата
V написал:
Не понял что вам нужно
В первой строке таблицы текст: "мама мыла раму", во второй строке таблицы текст "мыла раму мама", мой макрос конкретизирует запрос и ищет фразу "мама мыла раму" целиком, подставляя в соседний столбец первой строки "Нашлось!". Мне же хочется реализовать поиск по части фразы. Для этого конкретного примера обе фразы содержат сочетание "мыла раму". По запросу этого сочетания напротив обеих строк в теории появляется результат - "Нашлось!"
Изменено: Алиса Селезнева - 25.03.2019 16:34:56
Уж больно здесь красиво, жди беды..
 
Цитата
Пытливый написал:
Можно через метод Range.Find реализовать
Очень интересно, спасибо! Сейчас буду пробовать, кажется, действительно, то, что необходимо
Уж больно здесь красиво, жди беды..
 
Например, через Find можно так:
Скрытый текст
Изменено: Пытливый - 25.03.2019 17:27:46
Кому решение нужно - тот пример и рисует.
 
Пытливый, спасибо за отличный доходчивый пример! Единственное, что не могу, так это подставить вместо искомого значения свой текст, допустим, "содержит"

Код
Do
objR.Offset(0, 6) = Range("A1")
set objR.Value = "содержит"

пните, если такое применение в корне неверно  :sceptic:  
Изменено: Алиса Селезнева - 25.03.2019 17:50:10
Уж больно здесь красиво, жди беды..
 
Вы свой текст запишите в А1, макрос оттуда будет брать значение для поиска. (в моем примере). Пример нарисован для ситуации, что ищем значение ячейки А1 в диапазоне с А2 вниз докуда заполнено. Если нашли значение А1 (игнорируя регистр), то в той же строке где нашли, отступив 6 столбцов пишем значение чего искали.

Т.е. в А1 - чего ищем.
Изменено: Пытливый - 25.03.2019 17:56:44
Кому решение нужно - тот пример и рисует.
 
Алиса, посмотрите в приемах-нечеткий  текстовый поиск   Fuzzy LookUp  
 
Пытливый,это-то как раз таки понятно

Цитата
Вы свой текст запишите в А1, макрос оттуда будет брать значение для поиска
но есть ли возможность вставки не искомого текста, а своего, в контексте Вашего примера?Макрос нашел содержимое "А1" во всех последующих строках, а в "G2:G" помещает сообщение об этом, без дублирования текста запроса в столбец "G"

Цитата
Fuzzy LookUp
Знаю про него, но, к сожалению, умные таблицы не годятся для конкретного конечного пользователя
Изменено: Алиса Селезнева - 26.03.2019 00:52:32
Уж больно здесь красиво, жди беды..
 
Я бы делал такое на PQ и не мучался.
 
Цитата
но, к сожалению, умные таблицы не годятся для конкретного конечного пользователя
В приемах Николай Павлов как раз говорит
...эта надстройка умеет работать только с умными таблицами, поэтому все исходные таблицы нужно конвертировать в умные...
 
Если делать так, как вы хотите, то надо в этой строке:
Код
objR.Offset(0, 6) = Range("A1") 'отступаем от найденной ячейки 6 столбцов и пишем туда что искали
'написать не что мы искали, а конкретное значение, например:
objR.Offset(0, 6) = "содержит"
Кому решение нужно - тот пример и рисует.
 
Пытливый, еще раз спасибо! Вопрос исчерпан и закрыт с невероятной доходчивостью
Цитата
Kuzmich написал: текстовый поиск Fuzzy LookUp
Цитата
Alexey_Spb написал: Я бы делал такое на PQ
Ни тот, ни другой не могут прожевать большие объемы данных в купе с 2013 версией Excel на машине с достаточно неплохой офисной начинкой. Допускаю, конечно, корень проблемы в прокладке между креслом и клавиатурой. Всем спасибо и хорошего дня!
Уж больно здесь красиво, жди беды..
Страницы: 1
Наверх