VBA函数使用唯一的分割条目填充列

我需要帮助创build一个非常具体的VBAfunction。 我需要一个函数,将分裂一个单元格的值,并填充另一列与唯一值。

我目前正在使用=IFERROR(INDEX(List,MATCH(0,INDEX(COUNTIF($A$1:A2,List),0,0),0)),"") ,以便从一列中获得唯一的值到另一个。 不幸的是,这些值中的一部分将与“,”连接,但仍然是唯一的。

不幸的是,我对VBA的了解还远远不够。 有没有人有什么build议?

假设我们有这样的数据:

在这里输入图像说明

A列。 运行这个macros将提取唯一的,然后在列B

 Sub dural() Dim c As Collection, K As Long Set c = New Collection K = 1 On Error Resume Next For Each r In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) ary = Split(r.Text, ",") For Each a In ary c.Add a, CStr(a) If Err.Number = 0 Then Cells(K, "B").Value = a K = K + 1 Else Err.Number = 0 End If Next a Next r On Error GoTo 0 End Sub 

在这里输入图像说明

编辑#1:

这里是UDF格式的相同逻辑:

 Public Function UniKues(rIn As Range) Dim c As Collection, K As Long Set c = New Collection K = 1 On Error Resume Next For Each r In rIn ary = Split(r.Text, ",") For Each a In ary c.Add a, CStr(a) Next a Next r ReDim bry(1 To c.Count, 1 To 1) For i = 1 To c.Count bry(i, 1) = c.Item(i) Next i UniKues = bry On Error GoTo 0 End Function 

在这里输入图像说明

只需点亮B列的一部分,然后以数组formsinputUDF

编辑#2

这里是与chris neilsen的build议UDF

 Public Function UniKues(rIn As Range) Dim c As Collection, K As Long, MM As Long Dim CC As Long Set c = New Collection K = 1 On Error Resume Next For Each r In rIn ary = Split(r.Text, ",") For Each a In ary c.Add a, CStr(a) Next a Next r MM = Application.Caller.Rows.Count CC = c.Count dimn = Application.WorksheetFunction.Max(MM, CC) ReDim bry(1 To dimn, 1 To 1) For i = 1 To CC bry(i, 1) = c.Item(i) Next i If MM > CC Then For i = CC + 1 To MM bry(i, 1) = "" Next i End If UniKues = bry On Error GoTo 0 End Function