删除单元格内的重复项

我找不到在Excel中的同一个单元格内删除重复值的方法。 例如,在A1中,我有:

DOG DOG DOG 

我想只有DOG

代码输出:这将导致Excel单元格(37,4)中的某些值,如:

 2000 3000 0300 0300 2000 

我迷路了如何删除单元格中的重复值。

您可以使用反向引用的正则expression式来匹配重复的单词或短语。 nongreedy模式^(.+?)\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 

testing:

 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 

编辑

我看到你已经添加了一些额外的例子,不像你原来的例子那样完美地重复。 在这种情况下,您需要使用另一种方法。 如果您的值始终由空格分隔,请考虑将您的值拆分为数组并将其存储到Dictionary中以跟踪唯一值。 例如:

 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之间的空间

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 

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

把两者放在一起,我们得到:

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

希望这可以帮助!