簡體   English   中英

根據列值刪除行

[英]Deleting rows based on a column value

我想檢查一個單元格(“ C”)是否不包含日期或為空以刪除特定行。 我的代碼並未刪除所有特定行,並且對於行數來說似乎太慢了(138)。

lastrow = pertes.Cells(pertes.Rows.count, "A").End(xlUp).Row
For i = 2 To lastrow
    If Not IsDate(pertes.Cells(i, 3).Value) Or IsEmpty(pertes.Cells(i, 3).Value) Then
        pertes.Rows(i).Delete
    End If
Next i

如果您一一刪除或添加行,則循環必須倒退:

For i = lastrow To 2 Step -1 

否則刪除將更改行數,因此循環計數錯誤。


為了更快,您可以使用Union()收集某個范圍內必須刪除的所有行,然后最后一次將其全部刪除。 這樣更快,因為每個刪除操作都會花費時間,並將操作數量減少到1。

Option Explicit

Public Sub DeleteRows()
    Dim LastRow As Long
    LastRow = pertes.Cells(pertes.Rows.Count, "A").End(xlUp).Row

    Dim RowsToDelete As Range '… to collect all rows

    Dim i As Long
    For i = 2 To LastRow 'forward or backward loop possible
        If Not IsDate(pertes.Cells(i, 3).Value) Or IsEmpty(pertes.Cells(i, 3).Value) Then
            If RowsToDelete Is Nothing Then 'collect first row
                Set RowsToDelete = pertes.Rows(i)
            Else 'add more rows to that range
                Set RowsToDelete = Union(RowsToDelete, pertes.Rows(i))
            End If
        End If
    Next i

    RowsToDelete.Delete 'delete all rows at once
End Sub

請注意,這里我們不需要向后循環,因為我們在循環之后立即刪除了所有行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM