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

Mac Office 365 Excel如何优化删除行内重复值整行的卡顿VBA代码

需求说明

我当前使用的是Excel for Mac,因此所有代码建议都需要适配Mac端Office 365。
我有一个包含9列姓名的大型数据集,需求为:如果同一行内的多个列出现了相同的姓名,就删除该整行。
示例数据集如下:
示例数据集
需要删除的行判定规则:

  • Jason在第1行出现2次,删除
  • Jason在第2行出现3次,删除
  • Jason在第3行出现4次,删除
  • Sam在第4行出现2次,删除
  • Fred在第5行出现3次,删除
    即只要同一行内姓名出现重复,无论重复次数,直接删除整行。
    原有代码仅能实现基础功能,处理大型数据集时容易崩溃,且冗余度极高,需要更高效简洁、适配Mac Office 365的优化方案。

优化方案

原有代码性能差的核心原因有两点:一是逐单元格读取比较,IO开销极大;二是逐行删除,频繁操作工作表会严重拖慢运行速度。
优化方案采用「内存数组+字典判重+批量删除」的逻辑,运行效率较原代码提升数十倍,完全适配Mac端Office 365:

' 删除同一行内存在重复姓名的整行,适配Mac Office 365
Sub RemoveDuplicateRowsOptimized()
    Dim lastRow As Long, i As Long, j As Long
    Dim dataArr As Variant
    Dim delRange As Range
    Dim nameDict As Object
    
    ' 关闭屏幕更新和事件,大幅提升运行速度
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ' 获取当前工作表最后一行行号
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    ' 把A到I列的所有数据一次性读入数组,内存操作远快于直接操作单元格
    dataArr = Range("A1:I" & lastRow).Value
    
    ' 初始化字典,Mac Office 365已原生支持Scripting.Dictionary
    Set nameDict = CreateObject("Scripting.Dictionary")
    
    ' 从第2行开始遍历(默认第1行为表头,无表头可改为i=1)
    For i = 2 To UBound(dataArr, 1)
        nameDict.RemoveAll ' 清空字典,准备处理当前行
        For j = 1 To 9 ' 遍历当前行9列姓名
            ' 姓名已在字典中存在说明有重复,标记当前行待删除
            If nameDict.exists(dataArr(i, j)) Then
                If delRange Is Nothing Then
                    Set delRange = Rows(i)
                Else
                    Set delRange = Union(delRange, Rows(i))
                End If
                Exit For ' 找到重复即跳出当前行循环,无需检查剩余列
            Else
                nameDict.Add dataArr(i, j), True
            End If
        Next j
    Next i
    
    ' 一次性删除所有标记的行
    If Not delRange Is Nothing Then
        delRange.Delete
    End If
    
    ' 恢复屏幕更新和事件
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    MsgBox "处理完成,已删除所有存在重复姓名的行", vbInformation
End Sub

注意事项

  1. 运行前请备份数据,避免误删无法恢复
  2. 若数据集没有表头,把遍历起始行的i = 2修改为i = 1即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:04