2

我在尝试优化代码的某个部分时遇到了麻烦。我正在执行蒙特卡洛模拟,我想复制一个范围的值重复多次。为此,我使用了 For Each In 结构。下面是一个最小的例子。

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只有一个单元格;最终发生的只是第一列被复制,其余的都是空白的。我还使用了For Each acell in XYZ.rowswhereXYZ是先前定义的多列和多行范围。但是,这要慢得多。

是否可以从第一个单元格开始遍历单列范围并粘贴多列?

4

3 回答 3

1

这是你想要的?

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
于 2012-04-27T02:42:34.220 回答
0

最好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
于 2012-04-27T07:36:55.500 回答
0

您快到了; 你只是错过了代码中的一个微小变化。你必须达到Resize目标范围。代替

bcell.value=live.value ' bcell (presumably a typo) is only 1 column wide

采用

acell.Resize(1, live.Columns.Count).Value = live.Value
于 2012-04-27T12:18:05.883 回答