I did a little restructuring mostly because I didn't want to type all those InputBox's
I get the impression, that NPVTotalBase is fixed, and NPVTotalAlt is to be GoadSeeked to come as close as possible to NPVTotalBase??????
This is the formula, but I can't see what parameter in the 4 terms is to vary so come up with a 'almost 0' differencez?
NPVTotalAlt = NPV(Discount, AltComRev()) + NPV(Discount, AltFlexRev()) + NPV(Discount, SFRRev()) + NPV(Discount, MFRRev())
Option Explicit
Sub MyAltGrowth()
Dim Tax As Double
Dim Discount As Double
Dim Periods As Double
Dim BaseGrowth As Double
Dim AltGrowth As Double
Dim BaseComP1 As Double
Dim BaseFlexP1 As Double
Dim AltComP1 As Double
Dim AltFlexP1 As Double
Dim SFRP1 As Double
Dim MFRP1 As Double
Dim BaseComSQFT As Double
Dim BaseFlexSQFT As Double
Dim AltComSQFT As Double
Dim AltFlexSQFT As Double
Dim SFRGrossSQFT As Double
Dim SFRBuild As Double
Dim SFRNetSQFT As Double
Dim MFRSQFT As Double
Dim ComAV As Double
Dim FlexAV As Double
Dim SFRAV As Double
Dim MFRAV As Double
Dim ComFAR As Double
Dim FlexFAR As Double
Dim SFRFAR As Double
Dim MFRFAR As Double
Dim NPVTotalBase As Double
Dim NPVTotalAlt As Double
Dim NPVDiff As Double
With Worksheets("Input-Output")
Tax = .Range("B5")
Discount = .Range("B6")
Periods = .Range("B7")
ComFAR = .Range("B8")
FlexFAR = .Range("B9")
ComAV = .Range("B10")
FlexAV = .Range("B11")
BaseGrowth = .Range("B15")
BaseComP1 = .Range("B16")
BaseFlexP1 = .Range("B17")
BaseComSQFT = .Range("B18")
BaseFlexSQFT = .Range("B19")
AltComP1 = .Range("B23")
AltFlexP1 = .Range("B24")
SFRP1 = .Range("B25")
MFRP1 = .Range("B26")
AltComSQFT = .Range("B27")
AltFlexSQFT = .Range("B28")
SFRGrossSQFT = .Range("B29")
SFRBuild = .Range("B30")
MFRSQFT = .Range("B31")
SFRFAR = .Range("B32")
MFRFAR = .Range("B33")
SFRAV = .Range("B34")
MFRAV = .Range("B35")
End With
SFRNetSQFT = SFRGrossSQFT * SFRBuild
Dim BaseComArea(1000) As Double
Dim BaseComAV(1000) As Double
Dim BaseComValue(1000) As Double
Dim BaseComRev(1000) As Double
Dim BaseFlexArea(1000) As Double
Dim BaseFlexAV(1000) As Double
Dim BaseFlexValue(1000) As Double
Dim BaseFlexRev(1000) As Double
Dim AltComArea(1000) As Double
Dim AltComAV(1000) As Double
Dim AltComValue(1000) As Double
Dim AltComRev(1000) As Double
Dim AltFlexArea(1000) As Double
Dim AltFlexAV(1000) As Double
Dim AltFlexValue(1000) As Double
Dim AltFlexRev(1000) As Double
Dim SFRArea(1000) As Double
Dim SFRAV2(1000) As Double
Dim SFRValue(1000) As Double
Dim SFRRev(1000) As Double
Dim MFRArea(1000) As Double
Dim MFRAV2(1000) As Double
Dim MFRValue(1000) As Double
Dim MFRRev(1000) As Double
BaseComArea(0) = BaseComP1 * BaseComSQFT
BaseComAV(0) = ComAV
BaseComValue(0) = BaseComArea(0) * BaseComAV(0) * ComFAR
BaseComRev(0) = BaseComValue(0) * Tax
BaseFlexArea(0) = BaseFlexP1 * BaseFlexSQFT
BaseFlexAV(0) = FlexAV
BaseFlexValue(0) = BaseFlexArea(0) * BaseFlexAV(0) * FlexFAR
BaseFlexRev(0) = BaseFlexValue(0) * Tax
AltComArea(0) = AltComP1 * AltComSQFT
AltComAV(0) = ComAV
AltComValue(0) = AltComArea(0) * AltComAV(0) * ComFAR
AltComRev(0) = AltComValue(0) * Tax
AltFlexArea(0) = AltFlexP1 * AltFlexSQFT
AltFlexAV(0) = FlexAV
AltFlexValue(0) = AltFlexArea(0) * AltFlexAV(0) * FlexFAR
AltFlexRev(0) = AltFlexValue(0) * Tax
SFRArea(0) = SFRP1 * SFRNetSQFT
SFRAV2(0) = SFRAV
SFRValue(0) = SFRArea(0) * SFRAV2(0) * SFRFAR
SFRRev(0) = SFRValue(0) * Tax
MFRArea(0) = MFRP1 * MFRSQFT
MFRAV2(0) = MFRAV
MFRValue(0) = MFRArea(0) * MFRAV2(0) * MFRFAR
MFRRev(0) = MFRValue(0) * Tax
Dim i As Long
For i = 1 To Periods
BaseComArea(i) = ((1 - BaseComP1) / Periods) * BaseComSQFT
BaseComAV(i) = BaseComAV(i - 1) * (1 + BaseGrowth)
BaseComValue(i) = BaseComArea(i) * BaseComAV(i) * ComFAR
BaseComRev(i) = BaseComValue(i) * Tax
BaseFlexArea(i) = ((1 - BaseFlexP1) / Periods) * BaseFlexSQFT
BaseFlexAV(i) = BaseFlexAV(i - 1) * (1 + BaseGrowth)
BaseFlexValue(i) = BaseFlexArea(i) * BaseFlexAV(i) * FlexFAR
BaseFlexRev(i) = BaseFlexValue(i) * Tax
AltComArea(i) = ((1 - AltComP1) / Periods) * AltComSQFT
AltComAV(i) = AltComAV(i - 1) * (1 + BaseGrowth)
AltComValue(i) = AltComArea(i) * AltComAV(i) * ComFAR
AltComRev(i) = AltComValue(i) * Tax
AltFlexArea(i) = ((1 - AltFlexP1) / Periods) * AltFlexSQFT
AltFlexAV(i) = AltFlexAV(i - 1) * (1 + BaseGrowth)
AltFlexValue(i) = AltFlexArea(i) * AltFlexAV(i) * FlexFAR
AltFlexRev(i) = AltFlexValue(i) * Tax
SFRArea(i) = ((1 - SFRP1) / Periods) * SFRNetSQFT
SFRAV2(i) = SFRAV2(i - 1) * (1 + BaseGrowth)
SFRValue(i) = SFRArea(i) * SFRAV2(i) * SFRFAR
SFRRev(i) = SFRValue(i) * Tax
MFRArea(i) = ((1 - MFRP1) / Periods) * MFRSQFT
MFRAV2(i) = MFRAV2(i - 1) * (1 + BaseGrowth)
MFRValue(i) = MFRArea(i) * MFRAV2(i) * MFRFAR
MFRRev(i) = MFRValue(i) * Tax
Next I
With Worksheets("Input-Output")
.Range("E5").Value = NPV(Discount, BaseComRev())
.Range("E6").Value = NPV(Discount, BaseFlexRev())
.Range("E11").Value = NPV(Discount, AltComRev())
.Range("E12").Value = NPV(Discount, AltFlexRev())
.Range("E13").Value = NPV(Discount, SFRRev())
.Range("E14").Value = NPV(Discount, MFRRev())
End With
NPVTotalBase = NPV(Discount, BaseComRev()) + NPV(Discount, BaseFlexRev())
NPVTotalAlt = NPV(Discount, AltComRev()) + NPV(Discount, AltFlexRev()) + NPV(Discount, SFRRev()) + NPV(Discount, MFRRev())
NPVDiff = NPVTotalBase - NPVTotalAlt
'NPVDiff.GoalSeek Goal:=0, ChangingCell:=AltGrowth
MsgBox "Alt growth is " & AltGrowth
End Sub