Excel 对于每个输入:是否可以运行单个列范围并粘贴多个列,从第一个单元格开始?

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(

我在优化代码的某一部分时遇到了麻烦。我正在执行蒙特卡罗模拟,我想重复多次复制某个范围的值。为了做到这一点,我在结构中使用了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("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