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

求Excel VBA代码:删除A列重复且AC列不含Keep的行

解决Excel中基于A列重复且AC列不含"Keep"的行删除问题

方法1:手动辅助列+筛选删除

  • 插入新列(比如AD列),在AD2单元格输入公式:
    =AND(COUNTIF($A$2:$A2,A2)>1,ISERROR(SEARCH("Keep",AC2)))
    公式逻辑:判断当前行A列值在上方(含本行)是否重复,同时AC列不含"Keep",满足则返回TRUE。
  • 下拉填充公式到AD13528行。
  • 选中AD列,点击「数据」选项卡的「筛选」,筛选出值为TRUE的行。
  • 选中筛选出的所有行(避开表头),右键选择「删除行」,最后取消筛选即可。

方法2:VBA宏批量处理(适合大数量数据)

按Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:

Sub DeleteDuplicateRows()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim keepRows As Collection
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    Set keepRows = New Collection
    
    ' 先收集需要保留的重复行(AC列含"Keep"的)
    On Error Resume Next
    For i = 2 To lastRow
        If InStr(1, ws.Cells(i, "AC").Value, "Keep", vbTextCompare) > 0 Then
            keepRows.Add ws.Cells(i, "A").Value, Key:=CStr(ws.Cells(i, "A").Value)
        End If
    Next i
    On Error GoTo 0
    
    ' 从后往前遍历删除符合条件的行
    For i = lastRow To 2 Step -1
        ' 检查是否是需要保留的重复行
        If Not IsError(Application.Match(ws.Cells(i, "A").Value, keepRows, 0)) Then
            GoTo NextRow
        End If
        ' 检查A列是否重复,是则删除
        If Application.CountIf(ws.Range("A:A"), ws.Cells(i, "A").Value) > 1 Then
            ws.Rows(i).Delete
        End If
NextRow:
    Next i
End Sub
  • 按F5运行宏,自动删除目标行。
  • 提示:运行前务必备份文件,防止数据意外丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:15:28