Ene*_*oma 4 excel vba excel-vba
我运行此代码来删除> -100的行.然而,它保持循环,永不停止.
我在这里错过了什么?
For i = 2 To 500
If Worksheets("Sales").Cells(i, 3).Value > -100 Then
Worksheets("Sales").Cells(i, 3).EntireRow.Delete
i = i - 1
End If
Next i
Run Code Online (Sandbox Code Playgroud)
在VBA中删除或插入行时,您需要从最后一行开始并向第一行移动,因为任何给定的行在删除后会在循环中丢失或插入新行.
请参阅以下代码:
For i = 500 To 2 Step -1
If Worksheets("Sales").Cells(i, 3).Value > -100 Then
Worksheets("Sales").Cells(i, 3).EntireRow.Delete
End If
Next I
Run Code Online (Sandbox Code Playgroud)
我只是想到了这一点,它将运行得更快(特别是如果你有超过500个单元格):
With Worksheets("Sales")
'assumes row 1 is headers
.Range("C1:C500").AutoFilter 1, ">-100"
.Range("C2:C500").SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilterMode = False
End With
Run Code Online (Sandbox Code Playgroud)
也许你可以联合行并立即删除它们?像这样(未经测试).
Dim myRow As Range
Dim toDelete As Range
For i = 2 To 500
If Worksheets("Sales").Cells(i, 3).Value > -100 Then
Set myRow = Worksheets("Sales").Rows(i)
If toDelete Is Nothing Then
Set toDelete = myRow
Else
Set toDelete = Union(toDelete, myRow)
End If
End If
Next i
If Not toDelete Is Nothing Then _
toDelete.Delete
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |