Вы можете использовать регулярное выражение с обратной ссылкой для сопоставления дублирующихся слов или фраз. Неправильный шаблон ^(.+?)\s(\1\s*)+$
будет соответствовать любой дублирующей фразе с пробелом между ними.
Function RemoveDupes(strText)
With New RegExp
.Pattern = "^(.+?)\s(\1\s*)+$"
If .Test(strText) Then RemoveDupes = .Replace(strText, "$1")
End With
End Function
Тесты:
WScript.Echo RemoveDupes("Dog Cat Dog Cat") ' => Dog Cat
WScript.Echo RemoveDupes("Dog Dog") ' => Dog
WScript.Echo RemoveDupes("Dog Dog Dog") ' => Dog
WScript.Echo RemoveDupes("Dog Dog Dog Dog") ' => Dog
WScript.Echo RemoveDupes("Dog Cat Dog Cat Dog Cat") ' => Dog Cat
Редактировать:
Я вижу, вы добавили некоторые дополнительные примеры, которые не повторяются совершенно так же как и ваши оригинальные примеры. В этом случае вам нужно будет использовать альтернативный метод. Если ваши значения всегда разделены пробелом, подумайте о том, чтобы разделить ваши значения на массив и сохранить их в словаре, чтобы отслеживать уникальные значения. Например:
Dim d, a, i
Set d = CreateObject("Scripting.Dictionary")
a = Split(objExcel.ActiveSheet.Range("A1"), " ")
For i = 0 To UBound(a)
If Not d.Exists(a(i)) Then d.Add a(i), ""
Next
Теперь ваш словарь должен иметь уникальные значения из вашей клетки, и вы можете сливают:
objExcel.ActiveSheet.Range("A1") = Join(d.Keys, " ")
Всегда ли повторяется одно слово, или будут ли другие слова, такие как «Dog Dog Dog» с желаемым результатом «Dog Cat»? –
Привет Скотт. Это будет похоже на «Dog Cat Dog Cat». Я бы поискал вывод «Dog Cat» –
Я использую VBScript. извините за путаницу –