Excel 对于每个输入:是否可以运行单个列范围并粘贴多个列,从第一个单元格开始?
我在优化代码的某一部分时遇到了麻烦。我正在执行蒙特卡罗模拟,我想重复多次复制某个范围的值。为了做到这一点,我在结构中使用了For-Each。下面是一个简单的例子Excel 对于每个输入:是否可以运行单个列范围并粘贴多个列,从第一个单元格开始?,excel,vba,foreach,montecarlo,Excel,Vba,Foreach,Montecarlo,我在优化代码的某一部分时遇到了麻烦。我正在执行蒙特卡罗模拟,我想重复多次复制某个范围的值。为了做到这一点,我在结构中使用了For-Each。下面是一个简单的例子 sub example() Dim live As Excel.Range 'the range to be copied in each For Each In Dim acell as Excel.Range 'For range Set live = Range("C5:P5") For Each acell in Range(
sub example()
Dim live As Excel.Range 'the range to be copied in each For Each In
Dim acell as Excel.Range 'For range
Set live = Range("C5:P5")
For Each acell in Range("B9:B90")
acell.value=live.value
Next acell
End Sub
问题是live
跨越多个列,而acell
只是一个单元格;结果只是复制了第一列,其余的都是空白。我还为XYZ中的每个acell使用了。rows
其中XYZ
是先前定义的多个列和行的范围。然而,这要慢得多
是否可以从第一个单元格开始,在单个列范围内运行并粘贴多个列?这就是您要查找的内容
Sub example()
Dim live As Excel.Range 'the range to be copied in each For Each In
Dim acell As Excel.Range 'For range
Set live = Range("C5:P5")
live.Copy
Range("B9").PasteSpecial xlPasteValues, , , True
End Sub
最好将
C5:P5
作为数组读入:
Sub CopyLoop()
Dim copyRng(), targetRng As Range, cl As Range
copyRng = Range("C5:P5") 'Read in as array
Set targetRng = Range("B9:B90")
For Each cl In targetRng
Range("B" & cl.Row & ":O" & cl.Row) = copyRng
Next cl
End Sub
你就快到了;您只是缺少代码中的一个微小更改。您必须调整目标范围的大小。而不是
bcell.value=live.value ' bcell (presumably a typo) is only 1 column wide
使用
但这只复制到一行?。。。另外,这也是我通过艰苦的方式学到的:
Copy
-PasteSpecial
使用剪贴板,如果可能的话,这应该避免!其他程序可能会在代码运行时从剪贴板读/写剪贴板,两端的结果不可预测。不,这会将整个1行范围复制到1列范围,就像UI的“粘贴特殊值”转置一样。不过,在使用剪贴板的问题上,这一点很公平!好的,当然,只到一列。。。但那不是OP要求的?!谢谢我用.Columns(“A:N”)试过了,但是你的建议快了一点。
acell.Resize(1, live.Columns.Count).Value = live.Value