删除单元格中的重复项

时间:2015-09-10 19:33:49

标签: excel excel-vba vbscript vba

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

DOG DOG DOG

我想只有DOG

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

2000 3000 0300 0300 2000

我很遗憾如何删除单元格中的重复值。

2 个答案:

答案 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)

希望这有帮助!