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

AF列存在重复值时删除整行,遇WorksheetFunction.Match属性错误求助

解决AF列去重时的VBA错误及代码修正

你的代码出现Unable to get Match property of the WorksheetFunction class错误,加上去重逻辑失效,主要有三个问题:

  • 匹配列逻辑错误:你要处理AF列的重复值,但代码里拿的是B列(Cells(iCntr,2))的值去匹配AF列,完全偏离需求,应该用AF列自身的值来判断重复。
  • 循环方向错误:从第一行到最后一行循环时,删除行会导致后续行上移,循环变量iCntr递增后会跳过这些上移的行,应该从最后一行倒着往上循环。
  • Match函数未做错误处理:WorksheetFunction.Match找不到匹配项时会直接抛出运行时错误,改用Application.Match可以返回错误值,配合IsError判断就能避免报错。

修正后的代码如下:

Sub RemoveAFDuplicates()
    Dim lastRow As Long
    Dim matchFoundIndex As Variant ' 改为Variant类型,接收错误值
    Dim iCntr As Long
    
    ' 获取AF列的最后一行,确保统计数据范围准确
    lastRow = Range("AF" & Rows.Count).End(xlUp).Row
    
    ' 从最后一行往上循环,避免删除行后跳过数据
    For iCntr = lastRow To 1 Step -1
        ' 检查当前AF列单元格是否为空
        If Cells(iCntr, "AF").Value <> "" Then
            ' 用Application.Match,找不到时返回错误值
            matchFoundIndex = Application.Match(Cells(iCntr, "AF").Value, Range("AF1:AF" & iCntr - 1), 0)
            ' 如果找到匹配(说明之前已经出现过这个值),就删除当前行
            If Not IsError(matchFoundIndex) Then
                Cells(iCntr, 1).EntireRow.Delete
            End If
        End If
    Next iCntr
End Sub

代码说明:

  1. 改用Range("AF" & Rows.Count).End(xlUp).Row获取AF列的最后一行,避免依赖A列的行数导致范围不准确。
  2. 倒序循环(lastRow To 1 Step -1),删除行后不会影响未循环到的行的位置,彻底避免遗漏数据。
  3. 匹配范围改为AF1:AF" & iCntr - 1,只检查当前行之前的单元格,确保保留每个值第一次出现的行;如果需要保留最后一次出现的行,把匹配范围改成AF" & iCntr + 1 & ":AF" & lastRow即可。
  4. 用Variant类型接收Application.Match的结果,通过IsError判断是否找到匹配,从根源避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:03:12