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