gpt4 book ai didi

vba - 消除/更改循环以加快代码速度

转载 作者:行者123 更新时间:2023-12-04 20:33:46 30 4
gpt4 key购买 nike

我编写了一些运行速度很慢的 VBA 代码。我的代码中有一系列不同的循环。我知道循环并不总是处理数据的最有效方式,所以我认为它们是问题所在。我需要有关如何更改或消除循环的想法,以便加快代码的运行时间。

下面是我创建的最活跃的循环。它遍历 D 行(从 D2 开始)上的所有单元格,并根据第 1 行单元格中的条目来操作它们的值。如果我能在这个循环上获得帮助,我可能能够使用类似的技术来改变我的代码中的其他循环。任何提示表示赞赏。

'sub work week for date range
Range("D2").Select
Do Until IsEmpty(ActiveCell.Value)
If IsEmpty(ActiveCell.Offset(-1, 0)) = False Then
ActiveCell.Value = ActiveCell.Offset(-1, 0).Value & "-" & Right(ActiveCell.Value, 4)
Else: ActiveCell.Value = ActiveCell.Value & "-" & Right(ActiveCell.Offset(0, -1), 4)
End If
ActiveCell.Offset(0, 1).Select
Loop

最佳答案

最快、更有效的方法是评论中建议的使用数组。

不过,为了让您达到这一点,我已经为您提供了改进与 VBA 交互并了解如何在不选择或激活对象的情况下编写代码的第一步:

For i = 4 To Cells(2, Columns.Count).End(xlToLeft).Column
With Cells(2, i)
If .Offset(-1, 0).Value = vbNullString Then
.Value = .Value & "-" & Right$(.Offset(0, -1).Value, 4)
Else
.Value = .Offset(-1, 0).Value & "-" & Right$(.Value, 4)
End If
End With
Next

基本上,您不需要 .Select.Activate任何事物。直接使用对象并使用变量来指示列,而不是激活下一个单元格。

一旦您对以这种风格编写代码感到满意,请考虑将范围的值分配给 2D 数组,然后循环遍历该数组。

关于vba - 消除/更改循环以加快代码速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509166/

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