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