在 Excel 中复制粘贴 VBA 数据的“正确”方法是什么?
现在,至少据我所知,这三种是唯一可用的方法:
- the (
Range
) .Copy([Destination]) https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-copy-method-excel
这与可读性或您输入的字符数量无关。是关于你需要实现什么.
换句话说,它绝对不是主观的或基于观点的,就像编程中的几乎所有其他事情一样......
#这取决于。
If you're using Excel and copy-pasting cells around, do you Ctrl+C and Ctrl+V or use paste special?
取决于你需要做什么。
-
If you mean to copy a cell, its value, formats, data validations, borders, etc.; then .Paste [Destination]
is your best friend. That's the programmatic equivalent of Ctrl+C/Ctrl+V... Equivalent to PasteSpecial/All, which is overkill since .Paste [Destination]
already does everything you need it to do in this case.
单元格引用是完全不行的!
绝对地。硬编码的单元格引用是不好的。.Paste [Destination]
无论如何,它不会强迫你这样做,所以这一点毫无意义。
如果范围重叠,它将显示一条提示,有效地阻止宏在其轨道上停滞不前
复制和粘贴范围不能重叠,句号。您将收到该提示.PasteSpecial
too.
如果您想复制单元格的Value
, but not其格式、数据验证、边框等;然后.PasteSpecial
绝对是一个更好的主意,因为这相当于粘贴特殊/值- 除了分配单元格可能更有效Value
与你想要的(无需往返剪贴板);奥托如果你do意味着粘贴格式,或数据验证,或其他什么,那么这可能是最简单的方法。
Paste
不会“搞乱”格式。它完全按照它的意思去做。Paste
and PasteSpecial
are not等价物。使用适合工作的正确工具。它们实际上分别相当于“粘贴”和“选择性粘贴”的编程等价物 - 如果您在 Excel 中并系统地进行“选择性粘贴”,您将完成您的工作。但每次你这样做来“粘贴所有”时,你都比你需要的更加努力。
PasteSpecial
看起来像一把好锤子,但并非所有东西都是钉子。当您可以避免剪贴板写入时,通常最好避免它......但话又说回来,如果您正在处理巨大的数据集 https://stackoverflow.com/a/45020388/1188513(想想 100K+ 单元格),它的性能可能比仅仅分配值更好。
那是说:
@ScottCraner我确实考虑过,但这并不是真正的复制粘贴,而是更多的典型指针引用,因此我决定不将其包含在我的问题中。我不想打开一本书来讨论“什么算作复制粘贴”。
那是错的。.Range(foo).Value = .Range(bar).Value
不是“典型的指针引用”。它实际上是取以下值foo
到 2D 变量数组中,并将该 2D 变量数组转储到bar
,覆盖之前保存的值。因此,它绝对是敲击剪贴板的完全有效的替代方案 - 但您需要测试并比较Copy
+PasteSpecial
看看这是否是适合您情况的最佳(/最有效)解决方案:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)