首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA -代码执行速度极慢

VBA -代码执行速度极慢
EN

Stack Overflow用户
提问于 2013-04-23 23:25:15
回答 1查看 14.8K关注 0票数 3

我有一段相当简单的代码,我正在使用它来遍历一张excel数据表。基本上,我有超过150,000行的数据,我想删除除"Instrument Failure“之外的每一行,在这种情况下,我想要该行及其上、下一行(可能包含与故障相关的详细信息)。下面是我的代码:

代码语言:javascript
运行
复制
Sub UnsignedFailure()
Application.ScreenUpdating = False
'Start point
Set r = Range("E1")

'Loop, total rows is a function, executes quickly
For t = 3 To TotalRows
    'Check for a failure
    k = InStr(1, r.Cells(t, 1).Value, "Instrument Failure")
    'Verify that it corresponds to a GC
    b = InStr(1, r.Cells(t, 1).Offset(0, -3).Value, "GC")
    If k <> 0 And b <> 0 Then
    'Skip two rows if it is true
        t = t + 2
    Else
    'Delete the previous row since this row is not a failure
        r.Cells(t - 1, 1).EntireRow.Delete
    'Go back a row to account for the deleted row
        t = t - 1
    End If
Next t

Application.ScreenUpdating = True
End Sub

我已经通过单步执行的方式检查过了,它工作正常。然而,即使每次"IF“为真时都要中断代码,中断之间的时间似乎很长(检查20,000个单元格可能需要5分钟)。如果我让代码运行而没有中断,我还没有让它完成(计算机死机)。我是不是在代码中遗漏了什么或者效率低下了?任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-23 23:35:34

我使用excel宏的经验告诉我,将符合条件的数据复制到新工作表中要比删除不匹配的行效率高得多。

每次删除一行时,excel都会花费几毫秒的时间重新计算工作表(即使没有公式,它仍然会检查每个单元格以查看是否需要更新),并更新对用户的显示。你已经禁用了屏幕更新,这肯定会缩短一些时间。另一种方法是关闭Excel计算,将Application.Calculation = xlCalculationManual放在sub的顶部以禁用重新计算,将Application.Calculation = xlCalculationAutomatic放在底部以再次启用它。This site对excel的VBA代码优化有很好的借鉴作用。

正如我所说的,我认为最有效的事情是当数据符合您的条件时将数据移动到新的工作表中。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16173294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档