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は 1 つのセルにすぎないことです。結局、最初の列だけがコピーされ、残りは空白になります。また、以前に定義された複数の列と行の範囲であるFor Each acell in XYZ.rowswhereも使用しました。XYZただし、これはかなり遅くなります。

最初のセルから始めて、単一列の範囲を実行し、複数の列を貼り付けることは可能ですか?

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 に答える