加快macros观复制/偏移

下午好,

我有这个macros从一个工作表复制值到另一个工作表上的不同页面。 例如:

Sheet1.A1到Sheet2.K2,Sheet1.A2到Sheet2.AA2,Sheet1.A3到Sheet2.AQ2

我是这样做的:

Sheets("Inlog").Range("A1").Activate For i = 4 To k + 1 ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Activate ActiveCell.Value = Sheets("CBT").Range("J" & i).Value Next 

代码本身运行良好,但这不是唯一的循环,因为我希望从Sheet1复制多个范围到Sheet2。

我的完整的macros是诀窍,但大约需要4分钟才能完成。 更新的Excel版本的同事们甚至更久。

我的VBA技能是非常基本的,所以任何专业提示或其他方法来加速呢?

谢谢!

除了IIJHFII的build议,你应该避免使用ActiveCell ,而是使用Range -Objects。

您可以通过将Dim rng as Range并通过使用偏移来将Range保存在variables中

 Set rng = rng.Offset(rowOffset:=0, columnOffset:=10) 

它们的工作方式与ActiveCell完全相同(因为它也是一个Range -Object),因此您还可以设置.Value属性。

尝试closures屏幕更新:

 application.screenupdating = False Sheets("Inlog").Range("A1").Activate For i = 4 To k + 1 ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Activate ActiveCell.Value = Sheets("CBT").Range("J" & i).Value Next application.screenupdating = True 

应该节省一点时间在这种事情上

 Dim off As Long off = 1 For i = 4 To k + 1 Sheets("Inlog").Cells(1, off * 10).Value = Sheets("CBT").Cells(i, 10).Value off = off + 1 Next 

这应该这样做,它应该稍微快一点。 此外,你可以禁用自动计算和屏幕更新,把这个代码的开始:

 With Application .ScreenUpdating = False .Calculation = xlCalculationManual End With 

而这最后:

 With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic End With 

目前我正在复制一个值,然后将下一个值复制到相同的位置,但在下一个页面右侧。 我重写了这段代码,以便不是右转一页,而是下一页:

 For i = 4 To k Sheets("Inlog").Range("K" & (2 + 16 * (i - 3))) = Sheets("CBT").Range("K" & i) Next 

事实certificate,这是更快的方式。

屏幕更新也有帮助,谢谢!