[英]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.