Excel [VBA]查找重复数据并删除最旧的数据

时间:2015-05-12 08:34:04

标签: excel vba excel-vba

我在MS Excel中遇到问题。我有一个包含以下数据的电子表格:

 Name     |     timestamp
 ------------------------
 Smith    | 12.05.2015
 Smith    | 01.01.2015
 Smith    | 10.05.2015
 Simpson  | 14.04.2015
 Simpson  | 10.02.2015
 Simpson  | 21.03.2015
 Simpson  | 02.01.2015

我的数据更大,komplex,并且有重复的不同时间戳。现在我想删除oldes并想要这样的输出:

 Name     |     timestamp
 Smith    | 12.05.2015
 Simpson  | 14.04.2015

我知道如何删除重复项,但在这种情况下它有点不同。我希望你能帮助我解决问题。

2 个答案:

答案 0 :(得分:1)

您可能不需要VBA。

根据我的经验,Excel删除重复项代码可以删除列表中第一个遇到的重复项。

因此,按名称升序和时间戳降序对数据进行排序,然后仅从“名称”字段中删除重复项。

你应该留下最新的名字。

答案 1 :(得分:0)

我做了一些测试,Range.RemoveDuplicates似乎保留了每个重复值的第一个条目(至少在你要使用的排序范围内)。这是我的解决方案:

Sub SortAndCondense()
'This subroutine sorts a table by name and secondarily by descending date.  It then removes
'all duplicates in the name column.  By sorting the dates in descending order, only the most
'recent entries for each name are preserved
Dim wrkSht As Worksheet
Set wrkSht = ThisWorkbook.Worksheets("Sheet1")
Dim dateTable As Range
Dim header1 As Range, header2 As Range
Set dateTable = wrkSht.Range("A2:B7") 'insert your actual table range; modify as necessary for column headers
Set header1 = wrkSht.Range("A2")
Set header2 = wrkSht.Range("B2")

'sort the column primarily by name, and secondarily by descending date.  The order in which the names are sorted
'is irrelevant.
dateTable.Sort Key1:=header1, Key2:=header2, Order2:=xlDescending

'remove all duplicate names.  The way remove duplicates works (so far as I can tell) is that it keeps only the
'topmost entry for each duplicate column.
dateTable.RemoveDuplicates 1
End Sub