【发布时间】:2015-02-02 07:35:28
【问题描述】:
我有一个电子表格,可以从 3 种不同类型的文件中导入大量数据。它对其进行格式化,以便所有三个的输出都相同,在一种情况下,它需要根据该行的单元格中的内容删除行。问题在于,与格式化其他文件(没有梯级删除的文件)所需的几秒钟相比,这大约需要 1.5 到 2 分钟。工作表从大约 4000 行开始,删除了大约 1600 行。我目前的做法很好,一切正常,但有没有一种运行速度更快的方法?
rw = 1
Lastrow = 2600
NewRow = 0
NxtChk2:
If (Worksheets("ARCSRT.CND").Cells(rw, "c") >= "0") And (Worksheets("ARCSRT.CND").Cells(rw, "d") = "") Then
Worksheets("ARCSRT.CND").Rows(rw).EntireRow.Delete
rw = rw - 1
End If
If (Worksheets("ARCSRT.CND").Cells(rw, "b") = "0.0") And (Worksheets("ARCSRT.CND").Cells(rw, "c") = "") Then
Worksheets("ARCSRT.CND").Rows(rw).EntireRow.Delete
rw = rw - 1
End If
If rw = Lastrow Then GoTo LATER
rw = rw + 1
GoTo NxtChk2
【问题讨论】:
-
首先,关闭屏幕更新,将计算设置为手动,并禁用事件。如果这还不够快,请尝试使用数组和集合在 VBA 中完成所有工作,以避免对工作表进行多次读/写。请参阅 Chip Pearson 的网站,了解如何一步读取数组并将其写入范围。
-
一切都已关闭,这就是其他两种文件类型运行速度足够快的原因。我还没有尝试过阵列,将查看 Chips 网站。谢谢。
-
大卫,我看不出您的链接或下面的答案与我的问题有什么关系。我在问如何加快 Excel 中梯级的删除,而不是替换 Word 中的单词。除非我遗漏了什么,否则我不知道你们两个在说什么。
-
特别注意Sids method:将所有要删除的行收集到一个范围内,一次性删除。