从一系列单元格中提取重复值
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
我在这种情况下需要帮助。我在单元格 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