This tutorial shows how in when modeling a project finance project the maximum debt limit can be solved based on a target Debt Service Cover Ratio (DSCR). This exercise indicates the maximum debt size that can be supported by a certain Cashflow Available for Debt Service (CFADS) profile.
To set up the financial model, principal repayments need to be set to a target DSCR like in Screenshot 1 which is also found in the attached model. This layout for calculating principal is also discussed in detail in a previous tutorial – “Debt Sculpting to Achieve Target DSCR without VBA”.
This earlier tutorial we sculpted the principal repayments in every period to achieve a uniform DSCR of 1.50x, where as in this tutorial we will use the CFADS to solve for a maximum debt limit.
Screenshot 1: Setting up Principal Repayment
In this tutorial we cover the following
- Why and when would we use this method?
- What are the benefits and limitations of Goal Seek?
- Incorporating the sequence as a VBA macro
Why and when would you use this method?
In project finance it is common practice to solve for an indicative maximum debt limit that can be supported by a project.
There are several methods that can achieve that in a financial model. We can adjust the debt limit manually so that the closing debt balance at maturity is zero. Or we can use the Goal Seek function in Excel to perform the manual process quickly and efficiently.
Goal Seek is an in-built function in Excel and is used when you know the desired result of a single formula but not the input value the formula needs to achieve the result.
What are the benefits and limitations?
The Goal Seek function is simple to use because it only requires three inputs
- Set Cell – the cell that contains the outcome that you want
- To Value – the outcome
- By Changing Cell – the input value
However, the limitations are
- Does not work with two or more input values
- Only provides one solution, even for formulas which have multiple solutions
- Only works if the Set Cell value converges towards the To Value in each iteration
- The Set Cell and By Changing Cell values have to be on the same sheet
Goal Seek to Achieve Maximum Debt Limit Example
In our attached file we have a project with irregular cashflows, which will be used to solve for the maximum debt limit to achieve the target DSCR of 1.50x in every repayment period.
Step 1: Manual testing
Screenshot 2: Manually inserting Debt Limit in Inputs Sheet
Let’s say we start with a limit of $500m, the CFADS is not enough to repay the loan, thus there is still a Balance C/f @ Maturity (cell 18) of $178m. We will need to manually key in a lower limit until cell F18 is zero.
Step 2: Setting up the condition for Goal Seek
Alternatively we use the goal seek function to replicate the manual process of testing different debt limits (cell F20) that will reduce the debt balance to zero.
In Excel 2003: Tools –> Goal Seek
In Excel 2007: Data –> What – If Analysis –> Goal Seek
Screenshot 3: Goal Seek Window
- Set Value = Closing Debt Balance @ Maturity
- To Value = 0
- By Change Cell = Debt Amount
Screenshot 4: Solution after running goal seek
o solve for a maximum debt limit in F20, we need to adjust downward from a starting number that we know will definitely be higher than the solution. Any amount smaller than $366.63m will result in a zero debt balance at maturity, thus causing goal seek not to run. As a result we assumed a starting guess (cell F23) of $435m.
The Goal Seek macro using VBA
We can automate the process by setting up a macro that runs the Goal Seek function with a click of the button in the model.
Step 1: Record New Macro
The record macro function allows users to perform commands and store the commands in Visual Basic for Application (VBA). Press ‘Stop’ when all commands are complete.
The steps to record a macro are
- In Excel 2003: Tools –> Macro –> Record New Macro
- In Excel 2007: View –> Macros –> Record Macro
- Set Debt Limit (cell F20) = Starting Guess (cell F23)
- Perform Goal Seek function as outlined in Step 2 of the previous section
- Stop recording macro
Step 2: Replace cell references in macros with name ranges
To ensure that the macro works when a new row/column has been inserted, all ranges in VBA should be name ranged.
The following name ranges should be created
- “Actual_CBal” = Closing Debt Balance @ Maturity (Cell 18)
- “Debt_Limit” = Debt Amount (Cell F20)
- “Starting_Guess” = Starting Guess (Cell F23)
Replace all cell references in the code with the new name ranges.
Screenshot 5: Macro code of performing the goal seek function
Step 3: Create a macro button
For the macro to be used with ease, a button is created to run the macro.
First, create an object in Excel
- Excel 2003: Insert –> AutoShapes
- Excel 2007: Insert –> Shapes
To label and assign a macro to the button
- Right click on the object –> “Edit Text”
- Right click on the object –> “Assign Macro”
- Select the relevant macro
- Hit OK
Clicking on the button now will run the goal seek macro that we have recorded in Step 2.
Drawbacks of using VBA
- Relies on the user to know when and how to execute the macro
- Not all institutions allow the use of macros
- Reduces transparency
- Increases audit costs
- Cannot be used readily for ‘Data Tables’ in Scenario
- Managers (VBA for Scenario Analysis)
In a project finance project it is useful to know the maximum debt limit that can be supported by a DSCR to estimate the potential size of the debt funding that can be reasonably supported by the cashflows of a project. In this tutorial we have shown you by using VBA how to calculate the size of the maximum debt limit based on a target DSCR that is static. There is another useful article on on Fimodo about a similar topic.