Страницы: 1
RSS
Нужно убрать дублирующее слово/слова
 
Здравствуйте.

В столбце А есть список названий в которых дублируются некоторые слова или несколько слов, которые идут друг за другом. Слова могут быть в разном регистре, вот так:


Как можно убрать дубли слова/нескольких слов, которые идут друг за другом? Заранее благодарен за помощь
Изменено: realmen80 - 14.05.2019 16:36:10 (Забыл прикрепить пример файла при создании темы)
 
Добрый день.
Можно макросом, например. Только в картинке макросы не сохраняются.
Кому решение нужно - тот пример и рисует.
 
Забыл прикрепить пример файла при создании темы... Прошу прощения. Прикрепил.  
 
и с "The X" будут сложности, потому что повторяется не слово, а 2, а это уже с точки зрения программирования другая задача и другой алгоритм решения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Мне кажется, что пробел_внутри "Кожаная косметичка клатч THE X the x black" => "Кожаная косметичка клатч the x black" сильно усложняет задачу... Хотя мне сложно судить о возможностях макросов...
==================
Я бы попытался подумать о возможностях регулярных выражений
==================
В качестве решения можно попробовать составить словарь всех слов, встречающихся в массиве данных (исключения типа THE X в словарь можно добавить руками), а затем анализировать количество вхождений каждого из слов внутри каждого из текстов (и при необходимости расстояние между вхождениями)...
На мой взгляд из-за своей комплексности данная задача выходит за рамки этого раздела :)
Изменено: IKor - 14.05.2019 17:16:08
 
Можно решить макросом через использование коллекции и их неприятия дубликатов. :)
Скрытый текст

На листе - кнопка с побуждающей надписью.
Изменено: Пытливый - 15.05.2019 11:02:13
Кому решение нужно - тот пример и рисует.
 
Код
Function DelDouble$(s$)
  Dim re, ms: DelDouble = s
  Set re = CreateObject("VBScript.RegExp"): re.ignorecase = True: re.Pattern = "\b((\w+)\s+)(?:\2\b)+"
  If re.test(s) Then Set ms = re.Execute(s): _
    DelDouble = Left(s, ms(0).firstindex) & Right(s, Len(s) - ms(0).firstindex - Len(ms(0).submatches(0)))
End Function
Изменено: Ігор Гончаренко - 14.05.2019 18:47:15
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Пытливый, Ігор Гончаренко - огромное спасибо за помощь и разные варианты решения проблемы.  
Страницы: 1
Наверх