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

求VBA代码:当第5、10、11、12列数据均重复时删除重复行

按指定列删除重复行的VBA代码

以下是针对需求编写的VBA代码,可自动识别第5、10、11、12列的重复组合并删除对应行:

Sub RemoveDuplicateRows()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim key As String
    Dim dict As Object
    
    ' 指定目标工作表,根据实际表名修改
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' 获取数据区域的最后一行
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 从末尾倒序遍历,避免删除行导致的索引错位
    For i = lastRow To 2 Step -1
        ' 拼接指定列的值作为唯一标识,用|分隔避免歧义
        key = ws.Cells(i, 5).Value & "|" & ws.Cells(i, 10).Value & "|" & ws.Cells(i, 11).Value & "|" & ws.Cells(i, 12).Value
        
        If dict.Exists(key) Then
            ' 已存在相同组合,删除当前行
            ws.Rows(i).Delete
        Else
            ' 首次出现的组合,存入字典记录
            dict.Add key, i
        End If
    Next i
    
    ' 释放对象
    Set dict = Nothing
    Set ws = Nothing
    MsgBox "重复行删除完成", vbInformation
End Sub

关键说明:

  • 使用Scripting.Dictionary存储已出现的列值组合,比嵌套循环效率更高,适合处理大数据量
  • 倒序遍历行:如果从第一行开始删除,后续行的索引会因行删除发生偏移,导致漏判或误删
  • 分隔符|:避免不同列值拼接后产生混淆(例如列5值为"AB"、列10值为"C",与列5值为"A"、列10值为"BC"的情况)
  • 默认跳过第1行(表头行),如果你的表头不在第1行,修改To 2中的数字即可

自动触发方案(可选)

如果需要每次粘贴数据后自动执行去重,可将以下代码放入对应工作表的模块中(右键工作表标签→查看代码→粘贴):

Private Sub Worksheet_Change(ByVal Target As Range)
    RemoveDuplicateRows
End Sub

注:若数据量极大,自动触发可能导致卡顿,此时建议手动执行宏(按Alt+F8选择RemoveDuplicateRows运行)

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:10:07