我正在尝试从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
答案 0 :(得分:0)
嗯,首先,只需对代码进行非常小的更改,就可以通过将属性ScreenUpdating设置为false(在声明变量后立即编写此代码)使其更快,如下所示:
Application.ScreenUpdating = False
上面的代码保留了Excel而不在屏幕上呈现更改,并使处理速度更快。
以另一种方式考虑您的问题,您可以在工作表中放置一个公式,对于您拥有的条件返回TRUE或FALSE,然后使用AutoFilter一次删除它们。也可以在vba代码中执行此操作。
致以最诚挚的问候,
安倍