Raw*_*lus 4 excel performance vba copy-paste excel-vba
关于更多理论目的的问题:
在vba/excel-vba中复制粘贴数据的"正确"方法是什么?
现在,至少据我所知,这三种是唯一可用的方法:
Range) .Copy([Destination])方法Worksheet) .Paste([Destination, Link])方法Range) .PasteSpecial([Paste], [Operation], [SkipBlanks], [Transpose])方法现在,我做了我的研究,这些都是利弊的.Copy([Destination]) 和.Paste([Destination, Link])方法,至少那些,我能想到的:
+优点:
- 允许我们将数据粘贴到与复制相同的表达式中(代码可读性我猜...?)
和:
-缺点:
- 细胞参考是完全没有去!
- 你的格式和公式可能搞砸了
- 如果范围重叠,它将显示一个提示,有效地阻止宏死在它的轨道上 (这是一个巨大的无赖,特别是如果你试图自动化的东西)
- 更糟糕的是,如果按下
Cancel提示,它将抛出Error**(除非处理)
在硬币的另一边, .PasteSpecial()
+优点:
PasteSpecial()允许我们粘贴范围的特定部分!- 它允许我们指定我们想要做什么类型的粘贴
- 有一个内置的
skipBlanks和transpose功能- 不是"所以" - 不是
Error!
我努力想出任何一个,但是:
-缺点:
- 要写更多的字符..?
现在,这让我相信,方法的Destination论点.Copy()应该基本上被忽略,而PasteSpecial()应该总是使用.
有没有一个场合可能更适合使用它.PasteSpecial()?或者应该PasteSpecial()是每次复制粘贴操作的标准?
这与您的可读性或您输入的字符数无关.这是你需要实现的目标.
换句话说,它绝对不是主观的或基于意见的,并且像编程中的其他所有内容一样......
如果您正在使用Excel和复制粘贴单元格,您是否Ctrl+ C和Ctrl+ V或使用粘贴特殊?
取决于你需要做什么.
如果您的意思是复制单元格,其值,格式,数据验证,边框等; 那.Paste [Destination]是你最好的朋友.这是Ctrl+ C/ Ctrl+ 的程序化等价物V......相当于PasteSpecial/All,这是过度的,因为.Paste [Destination]在这种情况下已经完成了你需要做的一切.
细胞参考是完全没有去!
绝对.硬编码的单元格引用很糟糕..Paste [Destination]无论如何都不会强迫你这么做,所以重点是没有实际意义.
如果范围重叠,它将显示一个提示,有效地阻止宏在其轨道中死亡
复制和粘贴范围不能重叠,期间.你也会得到那个提示.PasteSpecial.
如果你的意思是复制一个单元格Value,而不是它的格式,数据验证,边框等; 然后.PasteSpecial绝对是一个更好的主意,因为这是程序上相当于粘贴特殊/值 - 除了它可能更有效地分配单元格Value与你想要的(不需要往返剪贴板); OTOH,如果你做的意思是粘贴格式或数据验证,或诸如此类的东西,那么这可能是最简单的方法.
Paste不会"搞乱"格式.它完全符合它的意义.Paste并且PasteSpecial是不等同物.使用正确的工具完成工作.它们分别是"粘贴"和"粘贴特殊"的程序化等价物 - 如果你在Excel中并系统地"粘贴特殊",你将完成你的工作.但每当你这样做"粘贴所有"时,你就会比你需要的更努力.
PasteSpecial看起来像一把漂亮的锤子,但不是一切都是钉子.当你可以避免剪贴板写入时,通常最好避免它...但是,如果你正在处理大量数据集(想想100K +单元格),那么它可能比仅仅分配值更好.
那说:
@ScottCraner我确实考虑过它,但这不是真正的复制粘贴,而是更多典型的指针引用,因此我决定不将它包含在我的问题中.我不想打开一本关于"什么算作复制粘贴"讨论的书.
那是错的..Range(foo).Value = .Range(bar).Value不是"典型的指针引用".它实际上将值foo转换为2D变体数组,并将该2D变体数组转储到上面bar,覆盖以前保存的值.因此,它绝对是一个完全有效的替代方法来击中剪贴板 - 但是你需要测试并与Copy+ PasteSpecial进行比较,以确定这是否是适合您情况的最佳(/最有效)解决方案:
Run Code Online (Sandbox Code Playgroud)Testing with 1500000 cells (100000 rows) Pasting from clipboard, single operation: 324.21875ms Setting cell values, single operation: 1496.09375ms Testing with 150 cells (10 rows) Pasting from clipboard, single operation: 11.71875ms Setting cell values, single operation: 3.90625ms Pasting from clipboard, iterative: 1773.4375ms Setting cell values, iterative: 105.46875ms
| 归档时间: |
|
| 查看次数: |
2004 次 |
| 最近记录: |