如何删除指定列重复项且保留该行其他列数据?VBA代码求助
仅清除指定列重复值(保留其他列数据)的VBA实现
原代码使用RemoveDuplicates方法会直接删除整行,不符合你的需求。要实现只清除目标列(CJ列,即第88列)的重复值、保留该行其他列数据,可以通过字典记录已出现的值,遍历清除重复项,具体代码如下:
修正后的代码
Dim ws As Worksheet Dim lastRow As Long Dim cell As Range Dim duplicateDict As Object ' 指定目标工作表,替换为你的实际表名 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 获取CJ列的最后一行数据行号 lastRow = ws.Cells(ws.Rows.Count, "CJ").End(xlUp).Row ' 创建字典用于存储已出现的CJ列值 Set duplicateDict = CreateObject("Scripting.Dictionary") ' 从表头下一行开始遍历(假设第1行是表头) For Each cell In ws.Range("CJ2:CJ" & lastRow) If duplicateDict.Exists(cell.Value) Then ' 若值已存在,清除当前单元格的重复内容 cell.ClearContents Else ' 若值首次出现,存入字典标记 duplicateDict.Add cell.Value, cell.Row End If Next cell ' 释放对象,避免内存占用 Set duplicateDict = Nothing Set ws = Nothing
关键说明
- 字典的作用:通过
Scripting.Dictionary快速判断当前值是否已出现过,比嵌套循环效率高很多,适合大数据量场景 - 仅清除目标列:代码只对CJ列的重复单元格执行
ClearContents,不会影响其他列的数据 - 原代码错误修正:你原代码中的
x1yes是拼写错误,正确常量应为xlYes(是字母l,不是数字1)
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

