2012-04-27 50 views
2

我一直无法尝试优化我的代码的某个部分。我正在执行蒙特卡洛模拟,我想复制一个范围的值重复的次数。为此,我使用了For Each In结构。下面是一个简单的例子。For Each In:是否可以运行单列范围并粘贴多列,从第一个FOR单元格开始?

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.rows,其中XYZ是先前定义的多个列和行的范围。但是,这是相当慢。

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

回答

0

你几乎没有;你只是错过了你的代码中的一个小小的改变。您必须以Resize为目标范围。 ?而不是

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

使用

acell.Resize(1, live.Columns.Count).Value = live.Value 
+0

谢谢!我用.Columns(“A:N”)试了一下,但是你的建议有点快。 – jnam27 2012-04-29 01:33:48

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 
+0

但这副本一行只......此外,这我知道痛苦的滋味:'Copy'-'PasteSpecial'使用剪贴板,这应该尽可能避免!其他程序可能会在您的代码运行时从剪贴板读取/写入剪贴板,并且两端的结果都不可预知。 – 2012-04-27 12:21:09

+0

不,这会将整个1行范围复制到1列范围,这与UI的Paste Special |值|转置会。虽然使用剪贴板的公平点不够! – 2012-04-27 21:34:34

+0

好吧,当然,只有一个*列* ...但这不是OP要求?! – 2012-04-29 08:04:53

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 
相关问题