从一系列单元格中提取重复值

Extracting the repeating values from a range of cells

我在这种情况下需要帮助。我在单元格 A1:F1 (1,1,1,2,2,4) 中有值,在 G1 中我只想提取重复值,在本例中为 (12)。更多示例:(2,2,3,3,4,4) 将是 (234)。 (0,0,1,2,3,9) 将是 (0)。如果单元格中没有重复值,那么它应该是空白的。

 Sample Data            Expected Result
1   2   3   4   4   4       4
0   1   1   1   2   4       1
1   1   2   2   3   5       12
0   2   2   3   5   5       25
0   1   2   3   4   5       
0   2   3   3   4   4       34
0   0   2   3   3   4       03
0   1   1   2   3   3       13
0   0   0   1   4   4       04
0   2   3   3   4   5       3
0   1   1   2   3   3       13
1   1   2   3   3   4       13
0   1   2   3   3   5       3
0   1   2   3   3   3       3
0   1   1   2   3   4       1
0   1   1   2   4   4       14
0   1   2   3   4   4       4
1   1   2   4   4   5       14
0   0   0   2   2   2       02
0   0   0   1   2   3       0

使用用户定义函数 (UDF) 很容易做到

此算法依赖于 Collection 对象,如果您尝试使用相同的键添加多个项目,则会抛出错误。

首先我们找到重复项 (CountIf >),然后将它们添加到集合中。知道错误将来自重复项目,我们跳过产生错误的添加,只剩下重复项目的单个条目。

在更复杂的情况下,可以通过测试查看返回了哪个错误,或者使用 Dictionary 对象。

Option Explicit
Function ConcatDups(rg As Range) As String
    Dim C As Range
    Dim col As Collection
    Dim V As Variant
    Dim sTemp As String
Set col = New Collection

On Error Resume Next 'collect single instance of Dups
With WorksheetFunction
For Each C In rg
    If WorksheetFunction.CountIf(rg, C) > 1 Then _
    col.Add C.Text, C.Text
Next C
End With
On Error GoTo 0

For Each V In col
    sTemp = sTemp & V
Next V

ConcatDups = sTemp

End Function