式は大きくなる必要があるため、セル内でこの式を一般化することはできません。また、Excel セルの数式には文字数制限があります (以下の @pnuts コメントを参照)。そのため、VBA を使用して数式を確実に "構築" することはできません。あなたのユースケースはこの制限に当てはまらないかもしれませんが、このようなケースでは、長い式の文字列を「構築」する VBA サブルーチンよりも UDF の単純さを好みます。
範囲を反復して値を計算するカスタム関数を作成できます。これは、サンプルデータで機能します。コードを標準コード モジュールに配置します。
Public Function GetValue(ByVal clStart As Range, ByVal clEnd As Range) As Variant
'Pass only the cell address for the first cell ("D1") and the last cell ("D4")
Dim rng As Range
Dim r As Range
Dim i As Long
Dim myVal As Double
Application.Volatile
If Not clStart.Column = clEnd.Column Then
'These cells should be in the same column, if not
' display an error
myVal = CVErr(2023)
GoTo EarlyExit
End If
Set rng = Range(clStart.Address, clEnd.Address)
For i = 1 To rng.Rows.Count - 1
Set r = rng.Cells(i)
myVal = myVal + _
((clEnd.Value - r.Value) * r.Offset(0, -1).Value)
Next
EarlyExit:
GetValue = myVal
End Function