VBA 将录制的宏的各个部分变成更高效的东西

VBA turning sections of a recorded macro into something more efficcient

我正在尝试优化一些数据排序代码,原始代码看起来已经 "written" 通过使用 excel "Record Macro" 函数。

以下是代码示例。

Range("A12").Offset(z, 0).Select
Selec.Resize(Selection.Rows.Count, Selection.Columns.Count + (X2 - 1)).Select
Selection.Copy
Range("C4").Offset(y, 0).Select
ActiveSheet.Paste

为了使这段代码更有效率,我是否应该重写这部分以包含一个范围变量,其 .Value 等于选择数据?

X2、z 和 y 变量用作复制函数的一部分,并缓慢增加以使最终产品的阅读更加容易。它们在模块的其他地方被更改。

我只是想看看您认为我应该做什么的一些建议。

我已经阅读了这里非常受欢迎的 "How to avoid using Select in Excel VBA Macros" 问题,我正在寻找进一步的建议。

(How to avoid using Select in Excel VBA macros)

谢谢

Copy/pasting 效率不高。做 Range("X1").value = Range("Y1").value 更好。这就是我要做的

'change this
Selection.Copy
Range("C4").Offset(y, 0).Select
ActiveSheet.Paste

'to this
Range("C4").Offset(y, 0).Value = Selection.Value 'selection value is the range that is being copied.

我想这是最简单的方法。

Range("C4").Offset(y, 0).Resize(1, x2) = Range("A12").Offset(z, 0).Resize(1, x2)

虽然我会建议:

  • 避免.Offset并改用命名范围
  • 避免 .Copy.Paste 有时您的数据对于剪贴板来说可能太大了,仅使用 =-operator 会更快
  • 不要用大写字母或额外的密码命名你的变量,这可能会很混乱
  • 使用这种格式 .Cells( row, column ) 而不是 `.Cells("A1")。更容易处理,更容易通过计算改变

HTH