簡體   English   中英

Excel VBA - 復制/粘貼行

[英]Excel VBA - copy/paste rows

我希望將由單元格A1:G1上的單行組成的范圍讀入具有 10 行的數組,然后將結果輸出到單元格A2:G11中的同一張紙上。 輸入行中的數據會發生變化,因為它基於包含隨機數的公式。 有人告訴我最快的方法是使用數組。 不知道該怎么做。 到目前為止,我有下面顯示的代碼。 這不起作用,因為它不會在將輸入數據粘貼到輸出單元格之前重新計算輸入數據,因此它會一遍又一遍地粘貼相同的值。 解決這個問題的最佳方法是什么?

Sub MyRange()
Dim DataInput As Variant
Dim NumberOfSims As Long, i As Long

Application.Calculation = xlManual
NumberOfSims = 10

DataInput = Range("DataInput").Value

For i = 1 To NumberOfSims
    Range(Cells(1 + i, "A"), Cells(1 + i, "g")).Value = DataInput
    Application.Calculate
Next i

End Sub 

DataInput永遠不會更改,因為DataInput = Range("DataInput").Value在循環之外,因此將一遍又一遍地粘貼相同的值。

將它移到里面,它會隨着每次迭代而更新。

Sub MyRange()
    Dim DataInput As Variant
    Dim NumberOfSims As Long, i As Long

    Application.Calculation = xlManual
    NumberOfSims = 10

    For i = 1 To NumberOfSims
        DataInput = Range("DataInput").Value
        Range(Cells(1 + i, "A"), Cells(1 + i, "G")).Value = DataInput
        Application.Calculate
    Next i

End Sub

您可以完全避免使用數組,而只需傳輸值:

For i = 1 To NumberOfSims
    Range(Cells(1 + i, "A"), Cells(1 + i, "G")).Value = Range("DataInput").Value
    Application.Calculate
Next i

編輯:

您可以將公式讀入數組,對其Evaluate ,然后一次全部寫回工作表,而不是不斷地重新計算和重新讀取工作表。

也許是這樣的:

Sub MyRange()
    Dim NumberOfSims As Long, NumberOfCols As Long

    NumberOfSims = 5000
    NumberOfCols = Range("DataInput").Columns.Count

    Dim InputFormulas() As Variant
    InputFormulas = Range("DataInput").Formula

    Dim OutputValues() As Variant
    ReDim OutputValues(1 To NumberOfSims, 1 To NumberOfCols)

    Dim R As Long, C As Long

    For R = 1 To UBound(OutputValues, 1)
        For C = 1 To UBound(OutputValues, 2)
            OutputValues(R, C) = Application.Evaluate(InputFormulas(1, C))
        Next C
    Next R

    Range("A2").Resize(UBound(OutputValues, 1), UBound(OutputValues, 2)).Value = OutputValues
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM