求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
相关产品推荐
相关产品推荐

