あなたが正しく理解していれば、データ配列(A〜R列にあります)があり、列Sの式が直接依存しているのは列Rのみです。
このマクロはこのトリックを行う必要があります。数式を決定するために計算的に集中することを計画していないと仮定すると、非常に高速になります。私のコンピュータ上では、書かれたこれらの2つは、100万行で1〜2秒で実行されます。
マクロは、処理したいデータテーブルの部分を選択することを前提としています。最後の列として「列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