我正在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 按钮
时,此宏删除不符合长度条件的行此代码中是否有解决方案? 还是存在更好的方法来删除行而不使用过滤器?
答案 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