VBA查找地址列空白单元格并将对应行移动到指定工作表问题
Excel VBA 筛选无街道地址行并移动到异常表解决方案
你的代码存在两个核心错误导致无法实现需求:
AutoFilter筛选空单元格的条件写法错误,"ISEmpty()"不是合法的筛选参数- 统计匹配行数时用
Subtotal(103, sdccrg),103对应COUNTA函数,仅统计非空单元格,筛选空单元格时永远返回0,无法触发移动逻辑
修正后可用代码
Sub NEW_NoAddress() Const scCol As Long = 6 ' 街道地址所在列,默认是F列,不符合你的表结构可以自行修改 Const dCol As Long = 1 ' 清除原有筛选 If Sheet1.AutoFilterMode Then Sheet1.AutoFilterMode = False End If Dim srg As Range Set srg = Sheet1.Range("A1").CurrentRegion ' 筛选空单元格的正确写法 srg.AutoFilter Field:=scCol, Criteria1:="=" Dim sdrg As Range Set sdrg = srg.Resize(srg.Rows.Count - 1).Offset(1) ' 防止无匹配行时SpecialCells报错中断程序 On Error Resume Next Dim sdfrrg As Range Set sdfrrg = sdrg.SpecialCells(xlCellTypeVisible) On Error GoTo 0 If Not sdfrrg Is Nothing Then ' 存在匹配的无地址行 Dim dCell As Range ' 定位异常表下一个空行 Set dCell = Sheet10.Cells(Sheet10.Rows.Count, dCol).End(xlUp).Offset(1, 0) ' 复制到异常表 sdfrrg.Copy dCell ' 清除筛选后删除原表对应行 Sheet1.AutoFilterMode = False sdfrrg.Delete xlShiftUp Else ' 无匹配则仅清除筛选 Sheet1.AutoFilterMode = False End If End Sub
补充说明
- 如果需要将仅包含空格、制表符等空白字符的单元格也判定为无地址,可以把筛选逻辑替换为多条件筛选:
srg.AutoFilter Field:=scCol, Criteria1:="=", Operator:=xlOr, Criteria2:="= *" - 确认代码中的
Sheet1(数据源表)、Sheet10(异常表)是你实际的表对象名称,若表名为中文可以替换为Sheets("数据源")、Sheets("异常")的写法 - 执行前建议先备份数据,避免误删
内容的提问来源于stack exchange,提问作者Jenny
相关产品推荐
相关产品推荐

