比较列表和删除重复

我一直在使用下面的公式来testing一列中的单个条目是否存在于第二列中:

=COUNTIF($E$1:$E$99504,$I1)>0 

我希望能够做的是说,如果上述公式计算结果为真,则从第二列(即E1-E99504范围内的副本)中删除重复条目,并将该条目的单元格向上移。 我相信,除了单元格移动之外,这可以在没有VBA的情况下完成。

但是,在这种情况下,我有5列比较,更可能在将来。 因此,我试图确定一种方法来使用VBA在多个列上执行上述操作。 否则,我需要运行相同的过程10次,我真的觉得有一个更有效的方法,我应该学习。 比较的层次如下:

假设我们有A,B,C,D,E列。 将A与B进行比较,然后对C进行比较,然后将其与D进行比较,其中每次在不固定列中重复的副本都将被删除,而A中的条目将保留。 然后B被固定,以相同的方式移动通过C,D和E,并且保留B中的条目。 同样的,直到D与E比较,并且过程完成。 有人已经做了这个algorithm吗? 任何帮助,将不胜感激。

使用纯粹的VBA解决scheme,并假设您的数据如下所示:

在这里输入图像说明

因为我们正在删除和移动数据,所以我build议倒退。 试试这个代码:

 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 

结果:

在这里输入图像说明


确保您更新工作表名称,范围和最后一列的编号以符合您的标准。