VBA将录制的宏的部分转换为更有效的部分

时间:2016-07-08 13:51:17

标签: excel vba excel-vba macros selection

我正在尝试优化一些数据排序代码,原始代码看起来像是通过使用excels“记录宏”功能“写入”。

以下是代码中的示例。

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等于Selection数据?

X2,z和y变量用作复制功能的一部分,并逐渐增加,以便更容易阅读最终产品。它们在模块的其他地方被改变。

我希望看到一些你认为我应该做的建议。

我已经在这里阅读了非常受欢迎的“如何避免在Excel VBA宏中使用Select”的问题,我只是在寻找一些进一步的建议。

How to avoid using Select in Excel VBA macros

由于

2 个答案:

答案 0 :(得分:0)

复制/粘贴效率不高。做范围(“X1”)。值=范围(“Y1”)。值更好。这就是我要做的事情

'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.

答案 1 :(得分:0)

我想这是最简单的方法。

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

虽然我会建议:

  • 以避免使用.Offset并使用命名范围
  • 要避免.Copy.Paste,有时您的数据可能对于剪贴板来说太大而仅使用= - 运算符会更快
  • 不用大写字母或其他密码命名变量,这可能会让人非常困惑
  • 使用此格式.Cells( row, column )而不是`.Cells(“A1”)。它更易于处理,并且可以通过计算更轻松地进行更改

HTH