2015-09-10 7 views
1

Я не могу найти способ удалить повторяющиеся значения внутри одной ячейки в Excel. Например, в A1, у меня есть:Удаление дубликатов в ячейке

DOG DOG DOG 

Я хочу иметь только DOG.

выход Код: Это приведет определенные значения в ячейке Excel (37, 4), такие как:

2000 3000 0300 0300 2000 

теряюсь о том, как удалить повторяющиеся значения в ячейке.

+0

Всегда ли повторяется одно слово, или будут ли другие слова, такие как «Dog Dog Dog» с желаемым результатом «Dog Cat»? –

+0

Привет Скотт. Это будет похоже на «Dog Cat Dog Cat». Я бы поискал вывод «Dog Cat» –

+0

Я использую VBScript. извините за путаницу –

ответ

2

Вы можете использовать регулярное выражение с обратной ссылкой для сопоставления дублирующихся слов или фраз. Неправильный шаблон ^(.+?)\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, " ") 
+0

Можете ли вы подробно рассказать о своем редактировании?Я никогда не использовал скриптовый словарь –

+0

Это просто ассоциативный массив (пары ключ/значение). Каждый ключ должен быть уникальным. ['Dictionary.Add (ключ, значение)'] (https://msdn.microsoft.com/en-us/library/5h92h863 (v = vs.84) .aspx) - это метод добавления новых записей. Таким образом, вы можете добавить каждое «слово» вашей ячейки в качестве ключа в словаре для фильтрации уникальных значений. – Bond

+0

Побей меня. Ницца. – brettdj

0

Должно быть что-то вроде ... Нам нужно знать, где пространство между СОБАКИ DOG ..

Excel:

=LEFT(A1,SEARCH(" ",A1)-1) 

VBS:

Left(string, length) 

Реф. https://msdn.microsoft.com/en-us/library/sk3xcs8k%28v=vs.84%29.aspx

InStr:

SOMESTRING = "DOG DOG DOG" 
InStr (1, SOMESTRING, " ") '-- look for the position of the space 

Ref. https://msdn.microsoft.com/en-us/library/wybb344c%28v=vs.84%29.aspx

Ввод два вместе мы получаем:

SOMESTRING = "DOG DOG DOG" 
RESULTS = Left(SOMESTRING, InStr (1, SOMESTRING, " ")-1) 

Надеется, что это помогает!

+0

Вы ответили на конкретный пример, а не на подход, который работает для любого текста. – brettdj

Смежные вопросы