改进循环以更快地删除excel中的行
如果BD列中的值为零,我创建了一个循环来删除行。循环可能需要半小时。我看到过使用自动过滤器或创建变体数组以加快功能的建议。如果您能为我下面的代码提供更好的解决方案,请告诉我改进循环以更快地删除excel中的行,excel,delete-row,vba,Excel,Delete Row,Vba,如果BD列中的值为零,我创建了一个循环来删除行。循环可能需要半小时。我看到过使用自动过滤器或创建变体数组以加快功能的建议。如果您能为我下面的代码提供更好的解决方案,请告诉我 Const colBD As Long = 56 Dim IRow As Long Dim LstRow As Long LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row IRow = 3 'loop to delete rows w
Const colBD As Long = 56
Dim IRow As Long
Dim LstRow As Long
LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
IRow = 3
'loop to delete rows with zero in colBD
Do While IRow <= LstRow
If Cells(IRow, colBD) = 0 Then
Cells(IRow, 1).EntireRow.Delete
LstRow = LstRow - 1 ' one less row
Else
IRow = IRow + 1 ' move to next row
End If
Loop
Const colBD的长度=56
暗淡无光
一排一排的
LstRow=ActiveSheet.Range(“A”&Rows.Count).End(xlUp).Row
IRow=3
'循环以删除colBD中为零的行
Do While IRow将要删除的所有行分配给一个范围,然后一次性删除该范围。这比逐个删除要快得多,并且可以防止错误
Const colBD As Long = 56
Dim IRow As Long
Dim LstRow As Long
Dim DelRng As Range
LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
IRow = 3
'loop to delete rows with zero in colBD
Do While IRow <= LstRow
If Cells(IRow, colBD) = 0 Then
If DelRng Is Nothing Then
Set DelRng = Cells(IRow, 1)
Else
Set DelRng = Union(DelRng, Cells(IRow, 1))
End If
Else
IRow = IRow + 1 ' move to next row
End If
Loop
If Not DelRng Is Nothing Then DelRng.EntireRow.Delete
Const colBD的长度=56
暗淡无光
一排一排的
暗德尔恩As范围
LstRow=ActiveSheet.Range(“A”&Rows.Count).End(xlUp).Row
IRow=3
'循环以删除colBD中为零的行
Do While IRow将要删除的所有行分配给一个范围,然后一次性删除该范围。这比逐个删除要快得多,并且可以防止错误
Const colBD As Long = 56
Dim IRow As Long
Dim LstRow As Long
Dim DelRng As Range
LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
IRow = 3
'loop to delete rows with zero in colBD
Do While IRow <= LstRow
If Cells(IRow, colBD) = 0 Then
If DelRng Is Nothing Then
Set DelRng = Cells(IRow, 1)
Else
Set DelRng = Union(DelRng, Cells(IRow, 1))
End If
Else
IRow = IRow + 1 ' move to next row
End If
Loop
If Not DelRng Is Nothing Then DelRng.EntireRow.Delete
Const colBD的长度=56
暗淡无光
一排一排的
暗德尔恩As范围
LstRow=ActiveSheet.Range(“A”&Rows.Count).End(xlUp).Row
IRow=3
'循环以删除colBD中为零的行
当IRow以上评论正确时,最好立即删除所有评论,但是如果循环,最好从结尾开始,然后返回。很容易陷入无休止的循环
Const colBD As Long = 56
Dim IRow As Long
Dim LstRow As Long
Dim i As Integer
LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
IRow = 3
'Always start with the last row and work towards the first when deleting rows
For i= LstRow to IRow Step - 1
If Cells(i, colBD) = 0 Then
Cells(i, 1).EntireRow.Delete
End If
End Sub
上面的评论是正确的,最好一次删除所有内容,但是如果循环,最好从末尾开始,然后再返回。很容易陷入无休止的循环
Const colBD As Long = 56
Dim IRow As Long
Dim LstRow As Long
Dim i As Integer
LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
IRow = 3
'Always start with the last row and work towards the first when deleting rows
For i= LstRow to IRow Step - 1
If Cells(i, colBD) = 0 Then
Cells(i, 1).EntireRow.Delete
End If
End Sub
我会先筛选0
,然后删除所有可见行:
Const colBD As Long = 56
Dim IRow As Long
Dim LstRow As Long
LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
IRow = 3
ActiveSheet.Range("A1:BD1").AutoFilter Field:=colBD, Criteria1:="0"
Range("BD" & IRow & ":BD" & LstRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
我会先筛选0
,然后删除所有可见行:
Const colBD As Long = 56
Dim IRow As Long
Dim LstRow As Long
LstRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
IRow = 3
ActiveSheet.Range("A1:BD1").AutoFilter Field:=colBD, Criteria1:="0"
Range("BD" & IRow & ":BD" & LstRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
最快的方法是先选择所有行,然后使用Range.delete
立即删除它们。这是最耗时的删除操作。只需添加到John Wu的答案中,您的范围可能是非连续的,因此您可能需要创建一个非连续的范围。在循环之前还需要使用Application.ScreenUpdate=False
(不要忘了在循环结束后将其重新打开)最快的方法是先选择所有行,然后使用Range.delete
立即删除它们。这是最耗时的删除操作。只需添加到John Wu的答案中,您的范围可能是非连续的,因此您可能需要创建一个非连续的范围。在循环之前还需要使用Application.ScreenUpdate=False
(不要忘了在循环结束后将其重新打开)