加速宏复制/偏移

时间:2016-04-22 13:07:09

标签: excel vba 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。

我的完整宏可以解决问题,但需要大约4分钟才能完成。对于使用较新版本Excel的同事来说,时间更长。

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

谢谢!

4 个答案:

答案 0 :(得分:1)

除IIJHFII建议外,您应该避免使用ActiveCell并使用Range - 对象。

您可以通过执行Range并使用

对其进行抵消来将Dim rng as Range保存在变量中
Set rng = rng.Offset(rowOffset:=0, columnOffset:=10)

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

答案 1 :(得分:0)

尝试关闭屏幕更新:

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

目前我正在复制一个值,然后将下一个值复制到相同的位置,但是在下一页到右边。我重新编写了代码,以便不会向右移动页面,而是向下翻页:

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

事实证明这种方式更快。

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