我找不到在Excel中删除同一单元格内的重复值的方法。例如,在A1中,我有:
DOG DOG DOG
我想只有DOG
。
代码输出:这将导致Excel单元格(37,4)中的某些值,例如:
2000 3000 0300 0300 2000
我很遗憾如何删除单元格中的重复值。
答案 0 :(得分:2)
您可以使用带有反向引用的正则表达式来匹配重复的单词或短语。 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
试验:
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, " ")
答案 1 :(得分:0)
应该是......我们需要知道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)
希望这有帮助!