Excel 拆分单元格并删除重复项?

Excel 拆分单元格并删除重复项?,excel,duplicates,cell,user-defined-functions,vba,Excel,Duplicates,Cell,User Defined Functions,Vba,我正在为学校的一个项目做切割集和路径集。我有一长串类似于以下的数据 1 9 9 9 9 9 16 1 9 9 9 9 9 17 1 9 9 9 9 9 15 1 9 9 9 9 9 18 1 9 9 9 9 9 19 1 9 9 9 9 9 20 1 9 9 9 9 9 21 1 9 9 9 9 10 16 1 9 9 9 9 10 17 1 9 9 9 9 10 15 1 9 9 9 9 10 18 几千个条目,每个条目在一个单元格中,每个数字用空格分隔。我希望能够删除重

我正在为学校的一个项目做切割集和路径集。我有一长串类似于以下的数据

1 9 9 9 9 9 16

1 9 9 9 9 9 17

1 9 9 9 9 9 15

1 9 9 9 9 9 18

1 9 9 9 9 9 19

1 9 9 9 9 9 20

1 9 9 9 9 9 21

1 9 9 9 9 10 16

1 9 9 9 9 10 17

1 9 9 9 9 10 15

1 9 9 9 9 10 18
几千个条目,每个条目在一个单元格中,每个数字用空格分隔。我希望能够删除重复的数字,在本例中为9,以便获得:

1 9 15

1 9 16

1 9 17

1 9 18

1 9 19

1 9 20

1 9 21
我该怎么做?请像我5岁一样向我解释。我对VBA或公式之类的东西一无所知。需要注意的是,其中一些可能具有以下值:

1 11 11 19

因此删除“1”并不好,我需要专门删除“11”

试试这个用户定义的函数

Function RemoveDuplicates(ByVal rng As Range) As String
Dim arr() As String
Dim i As Long
Dim dict
arr = Split(rng.Value, " ")
Set dict = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(arr)
    dict.Item(arr(i)) = ""
Next i
RemoveDuplicates = Join(dict.keys, " ")
End Function
假设您的字符串在A2中,那么您可以尝试上面的用户定义函数,如下所示

=RemoveDuplicates(A2)

尝试此用户定义的功能

Function RemoveDuplicates(ByVal rng As Range) As String
Dim arr() As String
Dim i As Long
Dim dict
arr = Split(rng.Value, " ")
Set dict = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(arr)
    dict.Item(arr(i)) = ""
Next i
RemoveDuplicates = Join(dict.keys, " ")
End Function
假设您的字符串在A2中,那么您可以尝试上面的用户定义函数,如下所示

=RemoveDuplicates(A2)

这是一个用户定义的函数UDF,用于创建它插入模块并粘贴以下代码

  • 按Alt+F11打开VB编辑器
  • 单击插入,
    模块
    ,然后粘贴代码
  • 函数Customduplicate(txt作为字符串,可选delim作为字符串=”)作为字符串
    暗淡的
    使用CreateObject(“Scripting.Dictionary”)
    .CompareMode=vbTextCompare
    对于拆分中的每个e(txt、delim)
    如果修剪(e)“,”且不存在(修剪(e)),则添加修剪(e),无任何内容
    下一个
    如果.Count>0,则Customduplicate=Join(.keys,delim)
    以
    端函数
    
    关闭VB编辑器后,您可以在fx中看到该函数
    在B1中
    =Customduplicate(A1,”)

    必须在函数的参数中包含分隔符“”一个空格
    A1是您的第一个单元格
    您可以将其向下拖动

    您可以将此UDF与其他分隔符“,”一起使用。

    这是一个用户定义的函数UDF,用于创建它插入模块并粘贴以下代码

  • 按Alt+F11打开VB编辑器
  • 单击插入,
    模块
    ,然后粘贴代码
  • 函数Customduplicate(txt作为字符串,可选delim作为字符串=”)作为字符串
    暗淡的
    使用CreateObject(“Scripting.Dictionary”)
    .CompareMode=vbTextCompare
    对于拆分中的每个e(txt、delim)
    如果修剪(e)“,”且不存在(修剪(e)),则添加修剪(e),无任何内容
    下一个
    如果.Count>0,则Customduplicate=Join(.keys,delim)
    以
    端函数
    
    关闭VB编辑器后,您可以在fx中看到该函数
    在B1中
    =Customduplicate(A1,”)

    必须在函数的参数中包含分隔符“”一个空格
    A1是您的第一个单元格
    您可以将其向下拖动

    您可以将此自定义项与其他分隔符“,”

    一起使用,它只表示#值!我不能完全确定我是否正确使用了这些函数。我只是去插入一个模块,复制粘贴在B2中,然后在B2中放置=RemovedDuplicates(A2)。请参阅此工作簿,其中代码放在模块1上。就连我下载的那本你写的书都写着#值#!关于它:(不确定为什么会发生这种情况。我在答案中添加了一个屏幕截图,以显示它是如何在工作表上使用并产生所需的输出的。它只是说#值!我不完全确定我是否正确使用了这些功能。我只是去插入一个模块,复制粘贴它,然后在B2中放入=RemoveDuplicates(A2)请参阅此工作簿,其中代码放在模块1上。即使是我下载的您所下载的那本,也在上面写着#VALUE!(不确定为什么会发生这种情况。我在答案中添加了一个屏幕截图,以显示如何在工作表上使用它并生成所需的输出。