You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel宏需求:保留重复公司条目最后一条记录

保留每家公司最新记录的解决方案

方法1:无代码手动操作(新手友好)

Excel内置删除重复项默认保留第一条,咱们反向操作就能实现需求:

  • 选中从第6行标题到最后一行的全部数据,点击「数据」选项卡的「排序」
  • 排序设置:主关键字选**列A(公司名称)**升序;再加个次要关键字——如果有更新时间列就选它降序,没有的话直接选「行号」降序(因为最后出现的记录行号更大)
  • 排序完成后,再次选中数据区域,点「数据」→「删除重复值」,只勾选列A,确定后每个公司的最后一条记录就会被保留(排序后它变成了同公司的第一条,删重复时会留它)
  • 如果需要恢复原顺序,最后再按原有的排序条件排回去就行

方法2:针对性VBA宏(高效处理大量数据)

要是数据量极大,手动操作麻烦,给你写了个精准适配需求的宏,跟着步骤走就行:

  1. 打开你的Excel文件,按Alt + F11打开VBA编辑器
  2. 右键点左侧的工作表名(比如「Sheet1」),选「插入」→「模块」
  3. 把下面的代码粘贴进去:
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
  1. 把代码里的"Sheet1"改成你实际的工作表名称
  2. 按F5运行宏,或者回到Excel点「开发工具」→「宏」,选中KeepLastCompanyRecord执行就行

宏的逻辑说明

  • 先从最后一行往上遍历,用字典存储每个公司的最后出现行号
  • 再从头检查每一行,只要不是该公司的最后一行就删掉,同时自动调整行号避免遗漏

内容的提问来源于stack exchange,提问作者R. Salzmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:50:34