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
我正在尝试优化一些数据排序代码,原始代码看起来已经 "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