Excel宏需求:保留重复公司条目最后一条记录
保留每家公司最新记录的解决方案
方法1:无代码手动操作(新手友好)
Excel内置删除重复项默认保留第一条,咱们反向操作就能实现需求:
- 选中从第6行标题到最后一行的全部数据,点击「数据」选项卡的「排序」
- 排序设置:主关键字选**列A(公司名称)**升序;再加个次要关键字——如果有更新时间列就选它降序,没有的话直接选「行号」降序(因为最后出现的记录行号更大)
- 排序完成后,再次选中数据区域,点「数据」→「删除重复值」,只勾选列A,确定后每个公司的最后一条记录就会被保留(排序后它变成了同公司的第一条,删重复时会留它)
- 如果需要恢复原顺序,最后再按原有的排序条件排回去就行
方法2:针对性VBA宏(高效处理大量数据)
要是数据量极大,手动操作麻烦,给你写了个精准适配需求的宏,跟着步骤走就行:
- 打开你的Excel文件,按
Alt + F11打开VBA编辑器 - 右键点左侧的工作表名(比如「Sheet1」),选「插入」→「模块」
- 把下面的代码粘贴进去:
Sub KeepLastCompanyRecord() Dim ws As Worksheet Dim lastRow As Long Dim companyDict As Object Dim i As Long ' 替换成你的工作表名称,比如"公司数据" Set ws = ThisWorkbook.Worksheets("Sheet1") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set companyDict = CreateObject("Scripting.Dictionary") ' 从最后一行往上扫,记录每个公司的最后出现行号 For i = lastRow To 7 Step -1 If Not companyDict.Exists(ws.Cells(i, "A").Value) Then companyDict.Add ws.Cells(i, "A").Value, i End If Next i ' 从头遍历,删除非最后一条的重复记录 For i = 7 To lastRow If companyDict(ws.Cells(i, "A").Value) <> i Then ws.Rows(i).Delete i = i - 1 ' 删除行后行号回退,避免跳过下一行 lastRow = lastRow - 1 End If Next i MsgBox "处理完成!已保留每家公司最新记录。" End Sub
- 把代码里的
"Sheet1"改成你实际的工作表名称 - 按
F5运行宏,或者回到Excel点「开发工具」→「宏」,选中KeepLastCompanyRecord执行就行
宏的逻辑说明
- 先从最后一行往上遍历,用字典存储每个公司的最后出现行号
- 再从头检查每一行,只要不是该公司的最后一行就删掉,同时自动调整行号避免遗漏
内容的提问来源于stack exchange,提问作者R. Salzmann
相关产品推荐
相关产品推荐

