比较Excel中的多个列并删除重复项

时间:2014-06-27 20:33:16

标签: excel excel-formula

我在Excel 2010中有3个包含电子邮件地址的列,我需要能够将所有3列缩小到只有唯一值。我不一定需要将剩余的值合并到一个列中,但我绝对需要消除重复。我找到了另一个带有VB的帖子,但它似乎没有用。它只删除了一些副本:

Sub removeDuplicates()
Dim lastCol As Integer
lastCol = 5    'col 5 is column E

Dim wks As Worksheet
Set wks = Worksheets("Sheet1")

Dim searchRange As Range
Set searchRange = wks.Range("A1:A" & wks.Cells(Rows.Count, "A").End(xlUp).Row)

Dim compareArray As Variant
Dim searchArray As Variant

'Get all values from Col A to search against
compareArray = searchRange.Value

For col = lastCol - 1 To 1 Step -1
    'Set values to search for matches
    searchArray = searchRange.Offset(0, col - 1).Value

    'Set values to last column to compare against
    compareArray = searchRange.Offset(0, col).Value

    For i = 1 To UBound(compareArray)
        If compareArray(i, 1) = searchArray(i, 1) Then
            'Match found, delete and shift left
            Cells(i, col).Delete Shift:=xlToLeft
        End If
    Next i
 Next col
End Sub

谢谢!

2 个答案:

答案 0 :(得分:0)

如果这是一项你不必经常做的一次性任务,我建议这样做。

我没有详细地输入整个过程,而是做了一个关于我如何做到这一点的截屏视频(整个过程几乎不花一分钟时间)。

快速概述:
您需要为每个电子邮件列表中的唯一值添加一些临时助手列(每个列表一个),一个'合并列表'列,然后是最后一列。使用'高级'过滤独特的电子邮件。一次过滤选项一列。将这些值粘贴到该电子邮件列表的临时列中,然后清除筛选器。重复,直到遍历每个列,每个临时列都包含每个列中的唯一值。从每个列表中获取唯一身份后,将这些一次性粘贴到“已合并列表”中。列(将结果堆叠在一个长列表中),然后对其执行唯一过滤。将该列表中的唯一身份复制/粘贴到最终列中,清除过滤器,然后您就完成了。


截屏视频如下:

http://screencast.com/t/zL8VmUut


干杯!

答案 1 :(得分:0)

由于第一列是您已经联系过的,所以将第一列与第二列交换,如果在第二列(您已经联系过的那些)上找到电子邮件,则在第三列上写下YES或NO值。

式。

=IF(ISERROR(VLOOKUP(A2,$B$2:$B$11,1,FALSE)),"Not Contacted","Yes")

Example

如您所见,带有“是”状态的那个位于联系人列表中,您只需过滤“未联系”,您将在A列中有一个新的待处理列表。 简单。