【问题标题】:Removing duplicates within a cell删除单元格中的重复项
【发布时间】:2015-09-12 03:27:56
【问题描述】:

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

DOG DOG DOG

我只想拥有DOG

代码输出:这将在 Excel 单元格中产生某些值 (37, 4),例如:

2000 3000 0300 0300 2000

我不知道如何删除单元格中的重复值。

【问题讨论】:

  • 总是重复一个词,还是会有其他词,比如“Dog Cat Dog”,期望输出“Dog Cat”?
  • 嗨,斯科特。它会像“狗猫狗猫”。我会寻找输出是“狗猫”
  • 我正在使用 VBScript。很抱歉造成混乱
  • 你能发布一个你尝试过的例子吗?
  • 我已经添加了我尝试过的内容,但我不知道如何处理同一单元格内的值重复

标签: excel vbscript vba


【解决方案1】:

您可以使用带有反向引用的正则表达式来匹配重复的单词或短语。非贪婪模式^(.+?)\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, " ")

【讨论】:

  • 您能否提供一些有关您的编辑的详细信息?我从来没有用过脚本字典
  • 它只是一个关联数组(键/值对)。每个键都必须是唯一的。 Dictionary.Add(key, value) 是添加新条目的方法。因此,您可以将单元格的每个“单词”添加为字典中的键以过滤唯一值。
  • 我搞定了,另一个循环出现错误,谢谢!
【解决方案2】:

应该类似于...我们需要知道 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)

希望这会有所帮助!

【讨论】:

  • 您回答的是具体示例,而不是适用于任何文本的方法。
猜你喜欢
  • 2014-11-11
  • 2015-03-11
  • 2020-11-07
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2017-12-04
相关资源
最近更新 更多