@Usman Ghayoor
For you, more indirect approaches are necessary. For example, it is possible to define a range
= OFFSET( Y0, 0, 0, 1, n+1 )
and the year number array is then generated from the normalised column location
= COLUMN( OFFSET( Y0, 0, 0, 1, n+1 ) ) - COLUMN( Y0 )
Since you don't want to use array formulas (not CSE anyway) you could populate the range by using the formula
= COLUMN() - COLUMN(Y0)
which is filled right until you get bored. In keeping with normal spreadsheet philosophy, arrays are not something with a defined number of terms, they are simply a matter of the user determining how far to fill the formula range (it is all action-led).
The amounts and discounts can then either be defined in terms of range names,
= initial.amount * (1+Incr)^yr
= amount / (1+rate)^yr
in which case they will pick up individual values for the calculation by implicit intersection or you can give up all semblance of order and meaning and use relative referencing
= $E$2 * (1+$E$4)^X$7
= X$9 / (1+$E$4)^X$7
again, filling to the right until you reach the n-
th year.
If you do not use the array calculations within named formulas the summation will require the definition of (old style) dynamic arrays, as you suggest. One way of creating these is to intersect the ranges you wish to sum with the columns that cover the years you want to take into consideration. This can be achieved by defining a range 'timeperiod'
= OFFSET( Y0, 0, 0, 10, n+1 )
and using formulas
=SUM(amount timeperiod)
=SUM(discounted timeperiod)
where the juxtaposition of ranges implies range intersection.