gpt4 book ai didi

excel - 删除行子处理速度很慢

转载 作者:行者123 更新时间:2023-12-04 20:52:39 28 4
gpt4 key购买 nike

我在 Excel 中构建了一个宏,它将来自多个输入选项卡的输入存储到数据库(表格格式)中。作为宏的一部分,我包含了一个 Sub 以删除给定年份 (CYear) 的任何先前条目,然后再为该年份编写新条目。

这工作正常,直到工作簿的大小增加到大约 10MB。代码的以下部分现在需要超过 1 小时才能运行。有没有其他可能更快的方法?

Application.ScreenUpdating = False 和 Application.Calculation = xlCalculationManual 包含在较大的 Sub 中,r 将接近数千行。

Dim r As Long
Sheets("Database").Activate

For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1

If Cells(r, "G") = Range("C5") Then
ActiveSheet.Rows(r).EntireRow.Delete
End If
Next

最佳答案

删除工作表中的某些内容是一个相当缓慢的操作,并且取决于您要删除的行数(而且看起来很多),您应该将所有应该删除的内容收集到 Range 中。 - 变量并立即将其全部删除。

另一个方面是 UsedRange并不总是可靠的,如果你不走运,宏会检查最后一行 (=1048576) 中的所有内容,这也可能是一个问题。构造.Cells(.Rows.Count, "G").End(xlUp).row将获得 Col 'G' 中最后使用的行的行号。

试试下面的代码

Sub del()

Dim r As Long
Dim deleteRange As Range
Set deleteRange = Nothing

With ThisWorkbook.Sheets(1)
For r = .Cells(.Rows.Count, "G").End(xlUp).row To 1 Step -1
If .Cells(r, "G") = .Range("C5") Then
If deleteRange Is Nothing Then
Set deleteRange = .Cells(r, "G")
Else
Set deleteRange = Union(deleteRange, .Cells(r, "G"))
End If
End If
Next
End With

If Not deleteRange Is Nothing Then
deleteRange.EntireRow.Delete
End If
End Sub

关于excel - 删除行子处理速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789668/

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