gpt4 book ai didi

excel - 删除具有两个条件的行的最有效方法

转载 作者:行者123 更新时间:2023-12-04 22:04:59 25 4
gpt4 key购买 nike

我要做的是删除电子表格中两个单独列中值为 0 的行,因为这表明该行中没有有用的数据。虽然可以使用 For loopIf/Then在这种情况下,我发现这非常慢,因为我的数据集有大约 51,000 行,而且它实际上需要数小时甚至数天才能运行。

经过一番搜索,我遇到了另一种方法,我认为它更快并且目前正在使用:

Public Sub deleteRows()
' source: http://www.ozgrid.com/forum/showthread.php?t=64364
Dim lastRow As Long
Dim n As Long
Dim RT As Date
RT = Time

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

For n = lastRow To 2 Step -1
If (Trim(ActiveSheet.Cells(n, 3).Value) = 0) And (Trim(ActiveSheet.Cells(n, 6).Value) = 0) Then
ActiveSheet.Cells(n, 1).EntireRow.Delete
End If
Next n
MsgBox Format(Time - RT, "hh:mm:ss")
End Sub

但是,我只用了 1000 个单元进行了测试,运行时间为 402 秒,这表明以相同的速率运行所有数据需要 5.584 小时。

有什么方法可以加快这个过程吗?我错过了一些明显的东西吗?

*编辑:此代码作为另一个代码的子部分运行,其中 ScreenUpdating = False 在代码的开头声明。

最佳答案

不,实际上需要更长的时间。如果您删除一行,它下面的每一行都会单独向上移动,如果您要删除的行下面有更多行,这显然需要更长的时间。

以下是几种简单的方法:

  • 使用 AutoFilter 过滤不需要的行,然后删除可见单元格。
  • 使用自动筛选来筛选要保留的行并将其复制到新工作簿。
  • 首先对值进行排序,以便所有不需要的行都位于底部。你已经从下往上删除了,所以你只需要在你的循环前面插入一个排序。
  • 关于excel - 删除具有两个条件的行的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068737/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com