Если вы правильно поняли, у вас есть массив данных (расположенный в столбцах A-R), а столбец R - единственное, от которого напрямую зависит формула в столбце S.
Этот макрос должен сделать трюк. Предполагая, что вы не планируете делать что-либо вычислительно интенсивным, чтобы определить формулу, это также будет очень быстро. На моем компьютере эти два, поскольку они написаны письменными, выполняются через 1-2 секунды на 1 миллион строк.
Макрос предполагает, что вы выберете часть таблицы данных, которую хотите обработать. Важно только, чтобы ваш столбец R был последним столбцом. Также было бы легко переписать его так, чтобы он всегда принимал столбец R, и он сам определяет, сколько строк у них, в случае, если это ваше желаемое поведение.
макросъемки:
Sub MyMacro()
Dim DataRange As Excel.Range
Dim InputRange As Excel.Range
Dim OutputRange As Excel.Range
Dim InputData() As Variant
Dim OutputData() As Variant
Dim RowNumber As Long
Dim ColumnNumber As Long
Dim i As Long
Set DataRange = Excel.Selection
RowNumber = DataRange.Rows.Count
ColumnNumber = DataRange.Columns.Count
'this sets the input as the last column in the data range and
'the output range exactly next to your array of inputs,
'regardless of whether it ends on column R, S, or wherever
Set InputRange = DataRange.Columns(ColumnNumber)
Set OutputRange = InputRange.Offset(0, 1)
'this stores the values from the input range into an array,
'and initializes the output array (it will be a 2D array - (Row, Column)
InputData = InputRange.Value
OutputData = OutputRange.Value
'you populate the value array inside VBA and only output to excel once -
'this is MUCH faster than interating through the cells directly
For i = 1 To RowNumber
OutputData(i, 1) = FunctionThatReturnsFormulasFromInputs(InputData(i, 1))
Next i
OutputRange.Formula = OutputData
End Sub
Пример функции:
Function FunctionThatReturnsFormulasFromInputs(InputValue As Variant) As String
Select Case InputValue
Case 1
FunctionThatReturnsFormulasFromInputs = "aaa"
Case Else
FunctionThatReturnsFormulasFromInputs = "bbb"
End Select
End Function