当单个数据在单元格中时,有效地删除行

时间:2015-05-04 20:37:47

标签: excel vba excel-vba

我正在尝试从Excel工作表中删除特定行,如果特定单元格中包含的数据与其邻居不同

工作表已经排序,因此我可以进行比较。

这里的问题是,尽管一张约3,000行的纸张花费的时间不到一分钟,但当这个数字升级到60,000时,功能似乎永远不会结束。

我正在尝试的是否有问题? 有更有效的方法吗?

Private Function DeleteSingleItemLines() As Long
    Dim lastRow As Long

    With ActiveSheet
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    lastRow = lastRow - 2

    For rwIndex = 6 To lastRow
        If Cells(rwIndex, "B").Value <> Cells(rwIndex + 1, "B").Value _
        And Cells(rwIndex, "B").Value <> Cells(rwIndex - 1, "B").Value Then
            Rows(rwIndex & ":" & rwIndex).Delete Shift:=xlUp
            lastRow = lastRow - 1
            rwIndex = rwIndex - 1
        End If
    Next rwIndex

    DeleteSingleItemLines = lastRow
End Function

1 个答案:

答案 0 :(得分:0)

嗯,首先,只需对代码进行非常小的更改,就可以通过将属性ScreenUpdating设置为false(在声明变量后立即编写此代码)使其更快,如下所示:

Application.ScreenUpdating = False

上面的代码保留了Excel而不在屏幕上呈现更改,并使处理速度更快。

以另一种方式考虑您的问题,您可以在工作表中放置一个公式,对于您拥有的条件返回TRUE或FALSE,然后使用AutoFilter一次删除它们。也可以在vba代码中执行此操作。

致以最诚挚的问候,

安倍