Excel VBA使用For循环逐列删除重复值,无效代码如何修复
VBA逐列删除重复值代码修复方案
原代码核心问题
- 单元格坐标参数颠倒:
Cells语法为Cells(行号, 列号),原代码将列循环变量i放在了行参数位置,选中的操作范围完全不符合预期 - 操作范围未绑定工作表对象:
Range前未加sht.限定,默认调用当前活动工作表范围,当活动工作表与sht不一致时会直接报错 RemoveDuplicates的Columns参数逻辑错误:该参数是相对于当前选中操作区域的相对列号,而非工作表的绝对列号,单独选中某一列操作时该参数固定为1即可- 行范围写死15000不够灵活,可直接复用已经获取到的最大行号
Endrow,避免数据超出范围导致遗漏 - 声明了未使用的变量
X,可直接删除避免编译警告
修复后完整代码
Sub DeleteDuplicates() Dim i As Integer Dim Endrow As Long Dim Endcolumn As Long Dim sht As Worksheet Set sht = ActiveSheet ' 获取当前工作表最大行号、最大列号 Endrow = sht.Cells.SpecialCells(xlCellTypeLastCell).Row Endcolumn = sht.Cells.SpecialCells(xlCellTypeLastCell).Column ' 逐列遍历执行去重 For i = 1 To Endcolumn ' 选中第i列完整数据范围,单列表区域Columns参数固定为1 sht.Range(sht.Cells(1, i), sht.Cells(Endrow, i)).RemoveDuplicates Columns:=1, Header:=xlNo Next End Sub
注意事项
如果你的列包含表头,只需把Header:=xlNo修改为Header:=xlYes即可,程序会自动保留第一行表头不参与去重计算。
内容的提问来源于stack exchange,提问作者ppark
相关产品推荐
相关产品推荐

