Excel数据表去重:保留最新呼叫日期的账户记录
批量去重:保留账户最新呼叫日期的记录
问题背景
现有名为dt的Excel数据表,存储账户(Account)呼叫记录,要求账户记录唯一无重复。因录入操作失误,更新账户呼叫备注时未直接修改原记录,而是将含更新备注的整条记录复制到主表,导致账户记录重复。需实现:若账户存在重复条目,仅保留含最新呼叫日期的条目,删除其余重复项,实际数据量超10万条,手动删除不可行。已通过=COUNTIF(dt[Account],[@Account])识别重复账户,但无法完成符合要求的批量去重。
解决方案
针对10万+数据量,推荐以下两种高效批量去重方法:
方法1:Power Query(推荐,稳定高效)
Power Query对大数据量处理性能优异,步骤如下:
- 选中
dt数据表的任意单元格,点击「数据」选项卡 → 「从表格/区域」(Excel 2016及以上版本支持),将数据导入Power Query编辑器。 - 点击「转换」选项卡 → 「分组依据」:
- 分组列选择
Account - 添加第一个聚合列:列名设为
最新呼叫日期,操作选「最大值」,目标列选Calling date - 添加第二个聚合列:列名设为
所有记录,操作选「所有行」
- 分组列选择
- 点击
所有记录列右侧的展开箭头,选择「展开到新行」,展开该账户的全部记录。 - 添加自定义列,输入公式:
= [Calling date] = [最新呼叫日期],标记每条记录是否为该账户的最新日期条目。 - 筛选自定义列,仅保留值为
TRUE的行。 - 删除
最新呼叫日期和自定义列,点击「主页」→ 「关闭并上载」,将处理后的数据导出到新工作表。
方法2:VBA代码(适合熟悉VBA的用户)
运行前务必备份原数据,避免数据丢失:
Sub RemoveDuplicatesKeepLatest() Dim ws As Worksheet Dim lastRow As Long, i As Long Dim accountDict As Object Dim maxDate As Date, currentDate As Date '替换为你的数据表所在工作表名称 Set ws = ThisWorkbook.Worksheets("dt") '假设Account列在A列,按需修改列号 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set accountDict = CreateObject("Scripting.Dictionary") '第一步:遍历记录,存储每个账户的最新呼叫日期 For i = 2 To lastRow '假设第一行是表头 '假设Calling date列在B列,按需修改列号 currentDate = IIf(IsEmpty(ws.Cells(i, "B").Value), DateSerial(1900, 1, 1), ws.Cells(i, "B").Value) accountKey = ws.Cells(i, "A").Value If accountDict.Exists(accountKey) Then If currentDate > accountDict(accountKey) Then accountDict(accountKey) = currentDate End If Else accountDict(accountKey) = currentDate End If Next i '第二步:从下往上遍历,删除非最新日期的重复记录 For i = lastRow To 2 Step -1 accountKey = ws.Cells(i, "A").Value currentDate = IIf(IsEmpty(ws.Cells(i, "B").Value), DateSerial(1900, 1, 1), ws.Cells(i, "B").Value) If currentDate < accountDict(accountKey) Then ws.Rows(i).Delete End If Next i Set accountDict = Nothing MsgBox "去重完成!" End Sub
使用说明:
- 按
Alt+F11打开VBA编辑器,插入模块后粘贴代码。 - 根据实际列位置修改代码中
Account(A列)和Calling date(B列)的列号。 - 代码已处理
Calling date为空值的情况,将空值设为1900年1月1日,确保有有效日期的记录被保留。
注意事项
- 若
Calling date存在空值,Power Query会自动忽略空值,保留该账户下有日期的最新记录;VBA代码已内置空值处理逻辑。 - 10万+数据量下,Power Query比VBA更稳定,不易出现内存溢出问题。
内容的提问来源于stack exchange,提问作者Syed Waqqas Uzair
相关产品推荐
相关产品推荐

