如果单元格的长度不符合条件,请删除列中的行

时间:2019-10-03 19:38:02

标签: excel vba row

我正在excel vba中的代码中工作,如果单元格的长度值不等于10,则删除行

我正在尝试避免使用过滤器,因为我使用了包含一百万行的文件,并且在使用过滤器时,excel会将其崩溃。

这就是我需要的

例如

A列包含一个ID号

但是如果ID的长度单元格不是10个字符

我要删除该行,我不需要它

我在各个论坛上搜索并收集了一些代码,以创建以下代码

Sub DeleteRows()
    Dim c As Range
    Dim LR As Integer
    Dim i As Integer
    Dim sht As Worksheet

    Set sht = Worksheets(2)

    LR = sht.Cells(Rows.Count, "A").End(xlUp).Row

    For i = 2 To LR
        For Each c In sht.Range("A2:A" & LR).Cells
            If Len(c.Value) <> 10 Then
                c.EntireRow.Delete
            End If                              '<---------here is the error
        Next
    Next

    Range("A1").Select

End Sub

当宏运行时,它卡住了,我必须按 ESC 来停止宏,并且错误出现在 End If

行中

当我按下 ESC 按钮

时,此宏删除不符合长度条件的行

此代码中是否有解决方案? 还是存在更好的方法来删除行而不使用过滤器?

1 个答案:

答案 0 :(得分:0)

由于要删除行,因此实际上应该向上计数,因为这会使您的计数混乱。例如,我在第3行,然后删除第3行,现在第4行在第3行,而我将继续从第5行开始。因此,请自下而上地进行操作。

Sub DeleteRows()
    Dim LR As Long
    Dim i As Long
    Dim sht As Worksheet

    Set sht = Worksheets(2)

    LR = sht.Cells(Rows.Count, "A").End(xlUp).Row

    For i = LR to 2 Step -1
        If Len(sht.cells(i,1).value)<>10 then
            sht.Rows(i).delete
        End If
    Next

Range("A1").Select

End Sub