Guiding Principles
Guiding Principles
com
Compiled and developed by Andrei Okhlopkov other articles: https://www.eloquens.com/channel/andrei-okhlopkov
In this note I will be talking about the general principles of building financial models and will give a few practical examples which cause complexities to many analysts.
"General" sheet
On this sheet I am giving brief notes on the general rules of building financial models.
"Layout" sheet
Explains how to design financial tables which look smart and are easy to read.
I stick to these guidelines not only in financial models but also in any report I prepare.
The following sheets ('Inputs', 'Capex', 'PL' 'Economics', 'Working capital', 'CF', 'Funding', 'BS', 'FS Y' ) contain a simple demonstration model which follows those principles. I have also tried to
explain the technical side of building models so you can start building your own models after you have reviewed this one.
"Inputs" sheet
This sheet contains inputs used in our mini-model. The inputs are formatted in line with the principles explained in the "General" sheet earlier.
Cells filled in blue are the inputs cells which users can change freely. Some of the cells (e.g. cell B5 which contains the number of months in model period) is technically an input cel but the model might need some fine-tuning after this
cell is changed, so it is not a pure input cell for the users.
This sheet also includes a summary of error checks and a financial summary, or model outputs. We will talk about both of them later.
"Capex" sheet
We start our modelling process with capex, but before we get into the details of it we will look at some of the fundamental principles which any modeller should be aware of.
At the top of the sheet you can see the links to the "Inputs" sheet with some dates, capex amounts etc. These are just links bringing numbers to this sheet, before these numbers are used in any further calculations. If we link our
formulae directly to the "Inputs" sheet, our calculations will quickly become messy and error-prone. But, with such direct links, we can immediately see what has gone into the calculations and make the outcomes more traceable for
an unfamiliar user.
This illustrates the principle of linked cells, or local references. If a calculation requires data from other sheets, do not make references to these sheets directly in formulae. Rather, make linked cells (which contain nothing but links to
those cells on the other sheets) and then refer your formulae to those linked cells on the same sheet. This helps to make the calculations more transparent and reduce errors.
This is just a recommendation for cross-sheet references within the same file. However, if your file has external references to other files, these references must be landed into separate cells first before you do any further calculations
on them. The reason for this is that one can changes an external file and move the cells your model refers to; and if your model is closed at that moment, the references will not be updated. Having these references as stand-alone
linked cells increases the chances of noticing something went wrong.
Finally, look at how the sheet is set up: there is a separate column (E) showing the units of measurement (a must in any model or report), several constant ('Const') columns (B through D) which have links to values used in the formulas
in corresponding rows, and a 'Total' column (F). It is important that you place your totals to the left of your main calculation area - by doing this you will not have to scroll right and left to see the totals and assumptions. You can also
extend your total formulae to the right-most column (which is column XFD in the current versions of Excel) and not bother about having to modify your formulae if the model is extended.
The sheet has a header (rows 15 and 16) which has the starting and the ending date of every period. Using both dates comes extremely helpful in many further calculations, as you soon will see.
Capex tranches are allocated by quarters in row 26 and then in column D. Range of cells C30:AH37 show a standard format for modelling depreciation. The analysis assumes all fixed assets have the same useful life, otherwise you will
need to do a separate section for every group of fixed assets with the same useful life.
"PL" sheet
Again, we start by looking at another fundamental principle which should be used in all models.
Using flags. We call a "flag" a designated symbol which indicates whether a certain condition is met or not. Flags are used mostly in timelines. For instance, we can use a flag to show if a period in the model to the project period, or
whether in this period the project starts or ends etc.
In our example flags take rows 19 - 22. The first flag (row 19) indicates whether the project starts in a particular model period. The formula checks whether both of the following conditions are satisfied at the same time: the starting
date of the project (31 May 2019 in cell B6) is greater than or equal to the beginning of the period date (row 12) and is less than or equal to the end of the period date (row 13). As both conditions must be satisfied, I am using the AND
function to evaluate these conditions.
The AND (as well as other logical functions) return TRUE or FALSE logical values. Although we can use them just as they are for further analysis, these values are not convenient to look at when they are too many. To make them more
distinct, we convert TRUEs into ones and FALSEs into zeroes by adding a double minus in the beginning of the formula. This uses the property of logical values to transform into 1 or 0 when a mathematical operation is performed upon
them, and in that case the first minus would convert TRUE into -1, and the second minus back into 1. The FALSE will just become and remain 0.
A more simple approach can be making a formula =(F12<=$B$6)*(F13>=$B$6) - the conditions are multiplied directly and return 1 if both of them are satisfied (i.e. both are equal to TRUE) or 0 (if at least one condition is FALSE then
the product of these conditions is 0)). However, using the logical functions (AND, OR,XOR) opens the way to more complex logic which cannot be evaluated with simple mathematical operations.
Cells with flags are formatted so that zeroes are shown as "-". This makes flags easier to read and see the trends and patterns. They also make the whole model more transparent, make dependent formulas shorter and eliminate
repetitive calculations.
The example model demonstrates how the flags are used further. If there is an investment of a certain amount coming in in a particular period, we multiply the amount of that investment by the flags indicating the first project period
(row 25). If there is an investment income coming in during the project life, we also use flags for that (row 26). Furthermore, we use flags to calculate how many days within a period the project is active (rows 21-22) to precise the
amount of income (this is especially relevant for the first and the last period of the project).
Last example here: in row 31 we need to show whether each period is within or outside the project. As these are non-numeric values, we cannot multiply or add them as we did before. We need to use the IF function, and the first
argument of it (logical test) can be either TRUE or FALSE or a number. In the latter case a 0 is equivalent to FALSE and any other number (5, 7.5, -12 etc.) is equivalent to TRUE. So the IF function can consume our 0 and 1 flags nicely.
The calculation start by taking unit prices and variable costs (rows 29 and 30) and applying inflation factor to them. Next section (rows 33-35) determines the number of units sold in current period. As the business case does not start
at a model period, we need a formula (row 34) to calculate the number of days when we operate in a current period. The formula is quite straightforward and relies on timing flags. Next row (35) calculates a year fraction from those
days, which is then used in row 33 to calculate the number of units.
This takes us to the Income Statement itself (rows 37-45). The calculations and formulae here refer to the above figures and are quite straightforward.
"Economics" sheet
This sheet deals with economic assumptions for the future.
A forward-looking financial model can assume there will be some inflation and exchange rate changes in the future. We apply these assumptions to prices and costs, and this gives us those numbers at some price levels in the future.
This assumption is called 'Nominal' terms, because we have a number if future price terms, but we do not know what this amount of money is really worth.
If we want to have an idea of the real value of this money, we do not use any economic forecast - we express all indicators in today's prices, and this scenario is called 'Real' terms.
Inflation is denoted in Consumer Price Inflation (CPI) - this is how retail prices for consumer goods are going to change, as opposed to Wholesale Price Inflation (WPI) - inflation for materials, utilities and other production costs. Those
numbers are in cells B20 and B21 and are linked to the Inputs sheet. From these cells they feed the calculations.
In order to break an annual inflation rate into for quarter, we need to use compounding formulae which you can see in rows 20-21. Then, in rows 26-27 you can see the rates used in the model. This makes another interesting use of
the "one/zero" flags. If the model runs under Nominal terms, as set in the Inputs sheet, cells B23 has a value "1", and "0" if the model is set to Real terms. Then formulae in rows 26 and 27 take the above cumulative inflation rate and
raise them to the power of cell's B23 value. Raising any number to the power 1 leaves this number as it is, and to the power zero changes it to 1. So if we choose Real terms, all numbers in rows 26 and 27 become equal to 100%, so the
amounts used in the model are not adjusted for inflation.
The last section in this sheet is the forecast of foreign exchange rates (FX). These rates are not used anywhere in the model but I have decided to include it here to show you the method. There is a forecast given in cells D2:E11.
Normally FX forecasts are provided as year-average figures (so we put 30 June of the corresponding year next to the amount) or as of the year-end (in which case we put 31 December). The challenge is that our model is made on a
quarter basis, so we need to determine the rates at the begining/end of every quarter, or quarter average, assuming the rates change evenly during the year.
First we do two helper columns (cells F2:G11). The first column calculates the number of days (using the 360 days basis) between the forecast starting date and a current forecast period date. The second column determines the daily
change in the rate in the current year.
We will also need two rows (30 and 31) which show the number of days between the current period's start/end date and the model start date.
Lets look at the formula in cell F34 as an example. We need to define the rate on 1-Jan-2019. We know the rate on 30-June-2018 was 110, and on 30-June-2019 it will be 120. As 1-Jan-2019 is exactly between those dates, the rate
must be 115. How does the formula arrive to it?
As the cell F30 suggests, there are 180 days between 30-June 2018 and 1-Jan-2019 (using the 360 days basis). The initial part of the formula in cell F34:
=ROW(INDIRECT("1:"&F30))
={1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77
;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118;119;120;121;122;123;124;125;126;127;128;129;130;131;132;133;134;135;136;
137;138;139;140;141;142;143;144;145;146;147;148;149;150;151;152;153;154;155;156;157;158;159;160;161;162;163;164;165;166;167;168;169;170;171;172;173;174;175;176;177;178;179;180}
These numbers are used by the LOOKUP function to determine the changes of FX rate at each of the above days, which returns this impressive array of numbers:
{0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277
777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777
777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;
0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.02777
77777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.02777777777
77778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0
.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777
7777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777777777
7778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.
0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777
7777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777777777
7778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.
0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777
7777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777777777
7778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.
0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777
7777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.027777777777
7778;0.0277777777777778;0.0277777777777778;0.0277777777777778;0.0277777777777778}
These numbers are added up using the SUMPRODUCT functions, which gives the total change of 5 in 180 days. Adding it to the starting rate (110) returns 115.
This formula can determine the FX rate at any date within the model period. The drawback of it is that the calculation may become very lengthy for distant future period, and will slow down your model. There is a way to shorten the
array by starting it not from 1 but from the previous period's day number, and adding the calculation under the SUMPRODUCT function to the rate obtained in previous period.
This formula can determine the FX rate at any date within the model period. The drawback of it is that the calculation may become very lengthy for distant future period, and will slow down your model. There is a way to shorten the
array by starting it not from 1 but from the previous period's day number, and adding the calculation under the SUMPRODUCT function to the rate obtained in previous period.
The underlying idea in modelling working capital items is the days' turnover. Imagine your customers pay within 15 days after the goods are delivered. This means that at any given moment you will today's revenues sitting in accounts
receivable, yesterday revenues, revenues from the day before yesterday, etc. up to the revenues from 15 days ago. After that your accounts receivable must have been repaid. Therefore, at any given day your accounts receivable will
be equal to your 15 days revenues. Since we know our quarterly revenues, we can figure out what our revenues for 15 days would be, which is the amount of accounts receivable:
Accounts receivable = Quarterly revenues / 90 days x 15 days
This formula is used in row 23. Formulae in rows 24 and 25 calculate the balances of inventory and accounts payable using the same approach.
Rows 27 and 28 underneath calculate the total working capital for the period and the change during the period. The amount of change will be used further to build the cash flow statement using the indirect method.
As you see, the method is rather simple but it is important to have a proper number of days' turnover for every working capital item.
Row 30 calculates the cash balance. There could be different methods for calculating cash balances: as a percentage of revenues, as a percentage of total assets, in some we can assume the balances should be immaterial and ignore
them. In this demo model I have put cash as 1% of sales revenues.
Note this is only a minimum balances we will maintain through the model. In some periods it will be higher due to real business case complexities.
"CF" sheet
Cash flow statements are constructed using direct or indirect methods. Indirect method is more common.
The essence of indirect method is that we take the net income, adjust it to non-cash items, and arrive to operating cash flow. Under the direct method though we start straight from the cash items (and ignoring non-cash items) to
calculate the operating cash flow.
Investing cash flow (row 22) takes the amounts we spend on capex from the 'Capex' sheet. Note if there is any sale of used equipment, the amounts of proceeds also go into this section.
Financing cash flow (24-28) takes the amounts from the next sheet, 'Funding'.
In the final rows (33 and 34) we calculate opening and closing cash balances for each period. There are checks against the balances sheet and checks for the cash balance to be positive.
"Funding" sheet
This sheet contains the calculations of how our project is funded. The analysis here is one of the most important ones as it serves two purposes:
- tells the investors how much money they need to put in and how much money they will receive in return, and when;
- balances the uses of cash (capex, inventory, expenses) with the sources (equity and debt financing)
This section can be one of the most versatile and complex in real-life models, depending on the actual financing arrangements (equity, debt, or mixed (mezzanine financing)), profit distribution strategies (dividend payout ratio, reserve
policies), profit sharing arrangements (for joint ventures and partnerships), and many, many else.
As this model is a simplified one, we will assume the bank will provide a fixed amount of financing (1,450 thousand USD) at project inception and there will be fixed amounts of loan repayment every quarter of principal (100 thousand
USD) and all accrued interest. The rest is paid up by the shareholder.
Calculations of loan balances and interest are in rows 16-21. Having determined the total debt cash flow (row 23), we will see how sufficient it is to cover our operating and financing requirements, to maintain minimum cahs balance
(rows 24-27). So we arrive (in row 28) to how much cash we need the shareholder to invest, or how much cash we have left for distribution to him or her.
This takes to the calculation of retained earnings (row 30). Formula in row 32 determines if there are positive retained earning in the current period and if we have cash we could distribute. If both conditions are satisfied, the
shareholder receives dividends. Note: in some jurisdictions it is also required that the net assets be positive, and distribution is allowed to the extent teh net assets do not become negative.
If it is determined there is a shortage of cash (in row 35), the shareholder is called upon an equity injection (row 38). If, on the other hand, it is determined there is cash available (which cannot be distributed due to the above
constraints) but there is a positive share capital balance, then this money can be repaid through equity redemption.
In simple terms, equity injection can be compared with giving a loan, and distribution of dividends with payment of interest (although there are numerous financial, statutory and tax complications).
Redemption of equity can be paralleled to repayment of loan principal.
"BS" sheet
Our balance sheet consists of items calculated on other sheets earlier:
Cash balances - from the "CF" sheet.
Other working capital items(accounts receivable, Inventory, Accounts payable) - from the "WC" sheet.
Let's look at cell E6 which refers to the 'PL' sheet. Row 13 on that sheet contains ending dates of the periods. We use the YEAR function to extract the years from those dates, and so the part of the formula:
=YEAR(PL!F13:XFD13)
returns:
={2019,2019,2019,2019,2020,2020,2020,2020,2021,2021,2021,2021,2022,2022,2022,2022,2023,2023,2023,2023,2024,2024,2024,2024,1900,1900,1900,1900,1900,1900, ...}
Years 1900 in the end correspond to empty cells after the end of our analysis period.
We then test which years correspond to the year in the heading of the column:
=YEAR(PL!F13:XFD13)=E3
={FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,...}
Cell E3 contains '2020', and the members from 5 to 8 return TRUE as they correspond to the four quarters of that year on the 'PL' sheet. If we now take row 38 of the 'PL' sheet (sales revenues), and multiply by the above array, the first
four values will stay and the rest will be zeroed out.
=PL!F38:AG38 * (YEAR(PL!F13:AG13)=E3)
={0,0,0,0,787.685657108196,795.447044120475,803.284907234369,811.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...}
We will then add all those numbers up using the SUMPRODUCT function, and the result will be our total sales in 2020 (3,198 thousand dollars).
All income statement and cash flow lines use this approach, but the balance sheet is slightly different. Here we don't need to add up four numbers but rather need to take the last one. So we add one more condition which tests if the
month of our quarter-end date is December, i.e. the MONTH function returns 12 (look at the formula in cell E21 as an example):
=SUMPRODUCT(BS!$E17:$XFD17 * (YEAR(BS!$E$11:$XFD$11)=E$3) * (MONTH(BS!$E$11:$XFD$11)=12))
In this case there will be only one non-zero number corresponding to the end of 2020. It remains after add all the numbers up and so the formula returns the cash balance as of the end of 2020 (8 thousand dollars).
Cross-checks are used to verify the mathematical accuracy of calculations and signal if something is missing. I consider it the most practical to set up the checks as differences between the expected results and the results at hand. If
there is a difference, this difference is immediately seen, and in many instances it is possible to locate an error just by seeing such a difference. In my example (which starts from row 6) I am giving proforma financial statements
(Income statement, Balance sheet, cash flow statement) of a prospective investment project.
The following are the fundamental controls for any set of financial statements. There are certainly other checks but these are the fundamental ones:
Let's imagine we have each of those forms on a separate sheet (Sheet1, Sheet2 and Sheet3). Every sheet has a check relating to it. Make sure you always say what is being checked in the line caption (see cells B16, B42 or B52). I am
also using conditional formatting which fills a cell in green if it is zero and in red if it is not.
There is also a check summary cell on every sheet which tells how many errors are found on every sheet (cells D18, D44, D54). It has the same conditional formatting (zero errors - green, otherwise red). These total feed the summary
sheet (Sheet4, I am depicting it to the right). It shows the number of errors on every sheet, and the total number of errors in the model (with the same conditional formatting).
As one of the checks points out (cell I42), in 2024 there is a mismatch between total assets and total liabilities and equity. I have deliberately cleared cell I34 (highlighted in yellow). Copy the formula from another cell in this row and
the check will be ok.
Note I am using rounding in the checks due to an Excel bug which sometimes causes minor differences even in those cases where the difference should be exactly zero. I am giving a simple example in the range of cells O5:Q9. I am
rounding to 5 digits but you can use a different number if 5 does not work for you.
'Results' sheet
This sheet draws the shareholder cashflows and analyses his or her profitability. The metrics is quite standard (IRR, NPV etc.) but I wanted to explain some complications which often occur.
Calculating IRR and NPV when your cash streams are zero in the first few periods. In the model depicted here we would normally use the XIRR and XNPV functions which are well documented and widely used. The problem happens
if the first few periods are outside of the project and have zero cash flows. We can of course adjust the formulas manually every time we change the starting date but this is considered a poor practice because we can forget. So will
need to do some tricks.
To calculate the IRR, we will use the XIRR function and push the starting period forward using the OFFSET function (cell C29):
There is also a check summary cell on every sheet which tells how many errors are found on every sheet (cells D18, D44, D54). It has the same conditional formatting (zero errors - green, otherwise red). These total feed the summary
sheet (Sheet4, I am depicting it to the right). It shows the number of errors on every sheet, and the total number of errors in the model (with the same conditional formatting).
As one of the checks points out (cell I42), in 2024 there is a mismatch between total assets and total liabilities and equity. I have deliberately cleared cell I34 (highlighted in yellow). Copy the formula from another cell in this row and
the check will be ok.
Note I am using rounding in the checks due to an Excel bug which sometimes causes minor differences even in those cases where the difference should be exactly zero. I am giving a simple example in the range of cells O5:Q9. I am
rounding to 5 digits but you can use a different number if 5 does not work for you.
'Results' sheet
This sheet draws the shareholder cashflows and analyses his or her profitability. The metrics is quite standard (IRR, NPV etc.) but I wanted to explain some complications which often occur.
Calculating IRR and NPV when your cash streams are zero in the first few periods. In the model depicted here we would normally use the XIRR and XNPV functions which are well documented and widely used. The problem happens
if the first few periods are outside of the project and have zero cash flows. We can of course adjust the formulas manually every time we change the starting date but this is considered a poor practice because we can forget. So will
need to do some tricks.
To calculate the IRR, we will use the XIRR function and push the starting period forward using the OFFSET function (cell C29):
=XIRR( OFFSET(D15,0,C27,1,C28), OFFSET(D10,0,C27,1,C28) )
To calculate the number of periods to offset for the formula to work, we will use the following calculation in cell C27:
=MATCH(TRUE,INDEX(D15:W15<>0,0),0)-1
This formula checks in which periods the cash flows are non-zero, matches the first period and reduces it by one to accommodate to the OFFSET function.
If your project is long enough, you can approximate IRR using a simple IRR function - unlike XIRR, it does ignore zeroes in the first periods. So we will use it here and as our model is quarterly, we will annualize the IRR using the formula:
We cannot do this with the NPV function but as the calculation of NPV is simple in itself we will decompose the NPV function and write it in simple mathematical operations (cell C31):
Calculating other metrics. In addition to IRR and NPV, it might be informative to show the total project duration and its Cash-on-Cash (CoC) ratio (also know as Money-on-Money (MoM) ratio).
The formula for project duration is shown in cell C34. I consider it the most convenient formula from the standpoint of proper rounding and formatting. Its first part (=YEARFRAC(B6,B7)) returns 5.583 which is the number of whole and
fractional years (in decimal format) between the start and the end date.
Next transformation: we are using the DOLLARFR function which converts the fraction from the decimal base to whatever base we indicate). In this case we will use 12 as the base, so we get the formula:
=DOLLARFR(YEARFRAC(B6,B7),12)
which returns 5.07. The decimal part (07) must be read as 'seven twelfths", as we have given 12 as the base. Or, as we are talking years and months here, it simply means "five years and seven months".
To make sure everyone understands it right, we should indicate clearly these are years and months. So we multiply it by 100 and use the TEXT function to apply the format "0\y 00\m" (we have to use the backslash symbols "\" because
"y" and "m" are special symbols reserved for date formats). The final formula is as follows:
=TEXT(DOLLARFR(YEARFRAC(B6,B7), 12) * 100, "0\y 00\m")
Calculating Cash-on-Cash ratio is easier: we take all positive cashflows, divide by negative cashflows and put a minus in front to make the ratio positive (formula in cell C35):
= - SUMIF(D15:W15,">0") / SUMIF(D15:W15,"<0")
Other common metrics are the breakeven date and the payback period. Two calculate those we first do the flags which indicate the cumulative cash flows have become positive (row 22) and that they will remain positive between now
and the end of the project (row 23). This is needed because at some point our cash flow might become positive, but then dive below zero again, so it will be too early to say the project has reached its breakeven point.
After that formula in cell C37 matches the first '1' in row 23, and returns a corresponding date in row 10. This is the date by which the project has achieved its breakeven point.
The payback period is the period between that date and the project start date. It is calculated and formatted in cell C38 with the same formula we have used in cell C34.
The sheets which follow contain various tips and advice which will come in handy when developing models or doing general financial stuff.
"Checks" sheet
This sheet gives some further theory about checks and controls which we have touched upon earlier on the 'FS Y' and other sheets.
"Instant" charts. From row 51 I am explaining how to use column charts to examine your numbers for unusual trends and patterns. This chart is created very quickly by selecting the number range and pressing Alt+F1. You don't need
to format the chart, or do anything else with it , it is an "instant" and "disposable" chart to quickly sense the figures (although you can delete the legend and the horizontal axis and resize the chart as convenient).
I am using such a quick chart here to study fixed asset balances over the years. As we have just discovered, there was an investment made in 2020 - this breaks the trend on the chart and is seen quite clearly.
Toggle formulas and results. Another control is to press Ctrl+~ to switch between formula view and result view and back. By seeing all formulas in a row, you can quickly notice if some formulas are different from the rest of the range
or some errors.
- make sure you always have background error checking enabled (click ‘FILE’ – ‘Options’ – ‘Formulas’ – ‘Error checking' and select ‘Enable background error checking’. Choose a flag color you will notice). Once you are there, also ensure
your ‘Workbook Calculation’ is set to ‘Automatic’.
An inconsistent formula made deliberately has to be marked (I normally use dark green color for that).
"Subotals" sheet
On this sheet I am explaining just a simple technique which saved many models - to reduce the risk of errors with the SUM function, leave an empty row before it and include this row into the formula. In that way, if you need to add
another row, you just insert it before that empty row, and it gets included into the calculation automatically.
To control your totals are accurate, you can use a check provided in row 21. It sums a range from the first cell down to and including the total, and divides the sum by the calculated total. If the total is correct, the result of this division
must be precisely 2. I am using the MOD function to find the fractional part of this division (which can be zero or non-zero). In this way this check can be incorporated into the overall system of model checks explained earlier.
"Circles" sheet
In situations where we model debt service using the after-tax cash flows many analysts think the cyclicalities are unavoidable: the cash available for debt service depends on the amount of tax, the amount of tax depends upon the
interest expense, the interest expense depends on the average loan balance, the average loan balance depends on how much loan we repaid during the period, and the amount we can repay depends on the available cash we have
(from step 1).
So the analysts write macros or create circular formulas, both of which are considered poor practices of financial modelling. This problem though is solved quite easily using the algebraic approach. We have a system of the following
equations (to make things easier I have assumed that EBIT, net income etc. are the same on the cash flow basis):
Interest expense = (Loan opening balance + Loan closing balance)/2 * Interest rate
Tax = (EBIT - Interest expense) * Tax rate
Repayment = EBIT - Interest expense - Tax
Interest expense = (2 * Loan opening balance - EBIT * (1 - Tax rate)) / ((1 - Tax rate) - 2 / Interest rate)
=(2*D16-D8*(1-$C$12)) / ((1-$C$12)-2/$C$9) (in cell D9 and on to the right)
This becomes more complex if a graduated tax schedule is used, under which the tax rate is not constant but depends on the profit amount. Such problems are solved using the iterative approach which I am explaining further down.
Graduated schedules for corporate profit tax are used in very few jurisdictions nowadays but it is important that you understand this method and can apply it to other situations.
In my example the tax brackets and rates are given in the range of cells K21:L26. For the sake of simplicity I have assume that the entire profit is taxed at a higher rate once the profit amount exceeded a threshold give.
We do a first calculation ("Iteration 0") where we don't calculate interest expense at all (range B23:I34).
Then we just copy this calculation down range B36:I47) and calculate the interest expense in it based on the previous iteration (row 37). Of course this is not accurate as the amount of repayment in the previous iteration did not take
into account the interest expense.
So we one more iteration (B49:I60) which is now based on some interest expense from Iteration 1 and more precise amounts of repayments.
And so on. In each iteration we fine-tune the numbers and, from my experience, using 3-5 iterations provides the level of accuracy of 4-5 digits - which is by far more than enough for any financial modelling purposes.
A cell's custom format is set through the Format-Cell menu (or by clicking Ctrl+1). A dialog box will come up in which you will need to select the 'Number' tab and 'Custom' category.
Custom format is typed into the 'Type' input box and generally consists of the following four (or less) categories separated by semi-colons (;):
- Positive number format
- Negative number format
- Zero format
- Text format
In the regular report example the following number format is used:
# ##0.0_);(# ##0.0);-_)
This means that positive numbers are formatted with thousand separators and one decimal place (but can be less or more if needed), negative numbers are surrounded by parentheses, and zeroes are shown as dashes (-). Note the
"_)" symbols after positive and zero numbers: they mean there will be a right indent equal to the size of a right parenthesis, so that all number are aligned by the last digit.
The text format is not specified, so if a text is entered into such a cell it will be shown in 'General' format.
Example on the right shows the calculation of variances (in absolute amounts and in percents). This can be a part of the budget vs. actual analysis, or a comparison of current to prior year etc.
We do a first calculation ("Iteration 0") where we don't calculate interest expense at all (range B23:I34).
Then we just copy this calculation down range B36:I47) and calculate the interest expense in it based on the previous iteration (row 37). Of course this is not accurate as the amount of repayment in the previous iteration did not take
into account the interest expense.
So we one more iteration (B49:I60) which is now based on some interest expense from Iteration 1 and more precise amounts of repayments.
And so on. In each iteration we fine-tune the numbers and, from my experience, using 3-5 iterations provides the level of accuracy of 4-5 digits - which is by far more than enough for any financial modelling purposes.
Custom format is typed into the 'Type' input box and generally consists of the following four (or less) categories separated by semi-colons (;):
This means that positive numbers are formatted with thousand separators and one decimal place (but can be less or more if needed), negative numbers are surrounded by parentheses, and zeroes are shown as dashes (-). Note the
"_)" symbols after positive and zero numbers: they mean there will be a right indent equal to the size of a right parenthesis, so that all number are aligned by the last digit.
The text format is not specified, so if a text is entered into such a cell it will be shown in 'General' format.
Example on the right shows the calculation of variances (in absolute amounts and in percents). This can be a part of the budget vs. actual analysis, or a comparison of current to prior year etc.
In comparative numbers it is better to indicate the sign clearly (both "+" and "-"), unlike regular numbers, where the positive sign is omitted. It is also better to show zero changes explicitly. Finally, we can mark changes in color, e.g.
positive changes in green and negative changes in red:
Note that to assign a color you can use either the color name or the color code. Both are given underneath the sheet.
Percentage change column is formatted as:
+0%;-0%;0%
which is more straightforward but I am using conditional formats here which we will discuss later below.
Percentage change is calculated in column J and the formula is more complicated then you might think. The starting point would be dividing the amount of change (column I) by the amount in the base (starting) period (column G):
=I7/G7
This formula will work in the first two examples (row 7 and 8).
In rows 9 and 10 it will return +20% and -20% respectively which does not make sense: there is a negative change in row 9 and a positive change in row 10, while the sign of the calculations is opposite. To fix this, we will take the
absolute of the denominator:
=I7/ABS(G7)
and will copy down. As a side not here, when you analyze actual vs. budget etc. use B/(W) (Better/(Worth)) in the column header, so that the readers immediately get an idea if the change is beneficial or not.
In rows 11 and 12 the numbers change signs between the periods, and the resulting changes are -180% and +183%. Although these number are mathematically correct, they do not tell much from the business or common sense
perspective. So rather then showing these numbers, we would say the percentage change is not applicable, or, better that the change was positive or negative. We do this elegantly using " ▲" and " ▼" symbols:
=IF(AND(G7<0,H7>0),"▲",IF(AND(G7>0,H7<0)," ▼",I7/ABS(G7)))
Next four examples (rows 13-16) have a very small amount in the base year, which results in very high percentage change (119900%). Again, such an amount does not tell much, so it is a good solution not to show percentages above a
certain limit. I have set this limit in my example to 1000% (cell J24) and the formula is now:
This formula also addresses the problem if the base year value is zero (because then 1000% of it will be less than the change) but there will still be a problem if both the base amount and the change are zero. To address this limitation
we do a final brushstroke:
=IF(I7=0,0,IF(OR(AND(G7<0,H7>0),I7>ABS(G7)*$J$24)," ▲",IF(OR(AND(G7>0,H7<0),I7<-ABS(G7)*$J$24)," ▼",I7/ABS(G7))))
This formula can return both numeric values (percents) and text (" ▲" and "▼"), so custom formatting with color-coding of those cells becomes impossible. We will therefore use conditional formatting to change cell colors.
In the 'Home' tab, click "Conditional Formatting' - 'New Rule...' to add a new rule. On this sheet all formats are already added, so click "Manage rules..." to review what has been done. The rules refer to cells in column I to see if the
changes were positive or negative and, depending on that, set the font color in cells in column J to positive or negative.
"FAGR" sheet
In many business situations we use historic data to build trends for the future. One of the commonly used and abused method is calculating Compound Annual Growth Rate (CAGR). As the data in Row 5 suggests, we started with 80
units of sales in 2013 which have grown to 200 by 2018. This means our sales were growing on average 20% per year (calculated in cell B6), so we can just apply this rate to sales volumes going forward and will get our forecast, right?
Wrong. If you look carefully at the sales pattern year-over-year in 2013-2018, you will notice the numbers were going all the way up and down. Under such volatility, the CAGR will strongly depend on which years you take as starting
and ending points for your forecast. If we ended our actual period in 2017 (or started in 2014), our growth rate would be way different.
Another problem is that this is exponential growth under which incremental sales tend to increase as the total volume increases, although from every experience the trend if the opposite.
To accommodate for these fluctuations, we will use Fitted Average Growth Rate (FAGR) - this analysis is about building a linear trend between all the points so the forecast becomes more logical and conservative. This method uses the
TREND function as demonstrated in row 7. Under this approach, the average annual growth rate is just as modest as 15% (cell B7) and the starting basis for the forecast is also lower.
This sets the format for the 'Actual' section. After that do the same with the 'Forecast' section.
Hope you have enjoyed and found this useful. As always, I am very much interested in your thoughts or any additional ideas.
Andrei Okhlopkov
[email protected]
Setup and structure of financial models
Key principleas
Clarity and transparency: the content, structure, logic, purpose and result of a model should be evident to any user
Flexibility: a model should allow for quick input changes and structural amendments when required
Accuracy: a model should be free from errors
Model structure
Working sheets
Inputs
Detailed calculations and analysis
Chart data tables
Error checks
Reference sheets (table of contents, structure and data flow charts, cell legend)
Output (presentation) sheets
Summary tables
KPIs
Charts
Cell classification
Every cell should be visually identifiable as containing one of the following types of data:
123 Inputs
246 Calculations (formulae). Note: inputs should never be mixed into formulae !
273 Inconsistent formulae (different from the rest of the row or column)
9,180 Work-in-progress (inputs or formulae which remain uncertain or subject to change)
-
Checks
40
554 External links
You can use any other styles you like as long as you use them consistently across every model
Inputs
Where possible, should be grouped together in a designated section
No repetitions - any single assumption should not be entered more than once anywhere in a workbook
Formulae
Complex formulae should be decomposed into more simple ones as far as they produce meaningful interim results:
Both solutions produce the same result, but the better solution is broken down into steps (profit per unit, profit per year).
This simplifies the formulae, provides useful additional figures, adds clarity to the analysis.
Stick to this approach in your models and reports.
Unit price 15 Indicating signs of operations ("+", "-", "×", "÷") and using links
(+) Unit cost (12) to inputs (unit price, unit cost etc.) make the calculation
(=) Profit per unit 3 the most transparent.
(×) Sales volume per year 100
(=) Profit per year 300
(×) Number of years 3
(=) Total profit 900
Spaces can be added almost anywhere in a formula (except function names and cell addresses)
Formulae should be consistent, i.e. identical across a row or column wherever possible. Inconsistent formualae must be marked (see above)
No repetitions – a calculation should be performed only once, with dependent calculations referring back to that single instance
Circular references should never be used in any model
I have added below two links to the resources where you can read more on modelling standards:
Financial Modelling Code by the Institute of Chartered Accountants in England and Wales (ICAEW)
https://www.icaew.com/technical/technology/excel/improve-your-financial-modelling-practice
Best Practice Spreadsheet Modeling Standards by the Spreadsheets Standards Review Board (SSRB)
http://www.ssrb.org/resources/standards
Report layout and formatting
For the purposes of this table I have made extensive use of Butterick’s Practical Typography (https://practicaltypography.com)
Do’s Don’ts
Formats and styles Use the “as-little-ink-as-possible” approach Whenever possible, choose not to style an element or section
Sections Use indent, smaller fonts and italics, shades of gray to outline the sub- Do not make too many levels of sub-headings – consider adding a
headings separate table if you have too many levels of data
Explain the content and purpose of every table, section or chart
Captions Do not leave the reader guess what that number is
Give a name to every row, column or stand-alone figure
Do not use vertical lines to separate columns with data of the same
Line separators Use horizontal rules to visually separate the lines if needed
Make the lines thin enough and gray (not black) nature; instead, use consistent alignment to create visual “columns”
Do not use “zebra” formatting (banded rows)
Numbers: always on the right
Alignment Text: always on the left Do not use central alignment
Headings: aligned with their data
Indicate units (USD, EUR, sqm, %) and multiples (thousands, millions) for Avoid custom formats which include units of measurement or display
Cell denomination each line or for the entire report numbers in thousands/millions
(e.g. “mln USD | 1.2; 2.7; 3.5”) (e.g. “$ 1.2 mln; $ 2.7 mln; $ 3.5 mln”)
Zero values Format zeros as “-” Do not format zeroes as “0”, “0.0” etc.
Empty cells Put “-” or “n/a” Do not leave cells blank
Do not hide rows or columns
Hiding data Group rows or columns (‘Data’ – ‘Group’) Do not white out numbers or use non-diplaying formats
Do not hide worksheets
Other Make your reports printable Do not put lengthy comments into your tables (1)
(1)
And if you need to explain something - make a footnote (like this one)
Inputs and assumptions Key project results
IRR % 43.8%
Model start date 1-Jan-19 Project start date 31-May-19 NPV $'000 #NAME?
Model period (months) 3 Project end date 31-Dec-24 Money-on-Money ratio x 2.11x
Payback period years, months 3y 07m
Capex program Leadtime Tranche amount
months $'000
Tranche 1 - (1,000)
Tranche 2 3 (500)
Tranche 3 4 (300)
Tranche 4 6 (400)
Tranche 5 9 (250)
Depreciation from: to: (2,450) $'000 #NAME? - (50) (90) (110) (123)
1-Jan-19 31-Dec-23 - $'000 #NAME? - - - - -
1-Apr-19 31-Mar-24 (1,000) $'000 #NAME? - (50) (50) (50) (50)
1-Jul-19 30-Jun-24 (800) $'000 #NAME? - - (40) (40) (40)
1-Oct-19 30-Sep-24 (400) $'000 #NAME? - - - (20) (20)
1-Jan-20 31-Dec-24 (250) $'000 #NAME? - - - - (13)
1-Apr-20 31-Mar-25 - $'000 #NAME? - - - - -
1-Jul-20 30-Jun-25 - $'000 #NAME? - - - - -
1-Oct-20 30-Sep-25 - $'000 #NAME? - - - - -
1-Jan-21 31-Dec-25 - $'000 #NAME? - - - - -
90 91 91 89 90 91 91 89 90 91 91 89 90 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
- - - - - - - - - - - - - -
(123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (123)
- - - - - - - - - - - - - -
(50) (50) (50) (50) (50) (50) (50) (50) (50) (50) (50) (50) (50) (50)
(40) (40) (40) (40) (40) (40) (40) (40) (40) (40) (40) (40) (40) (40)
(20) (20) (20) (20) (20) (20) (20) (20) (20) (20) (20) (20) (20) (20)
(13) (13) (13) (13) (13) (13) (13) (13) (13) (13) (13) (13) (13) (13)
- - - - - - - - - - - - - -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - -
2,450 2,450 2,450 2,450 2,450 2,450 2,450 2,450 2,450 2,450 2,450 2,450 2,450 2,450
(495) (618) (740) (863) (985) (1,108) (1,230) (1,353) (1,475) (1,598) (1,720) (1,843) (1,965) (2,088)
1,955 1,833 1,710 1,588 1,465 1,343 1,220 1,098 975 853 730 608 485 363
1-Oct-23 1-Jan-24 1-Apr-24 1-Jul-24 1-Oct-24 1-Jan-25 1-Apr-25 1-Jul-25 1-Oct-25
31-Dec-23 31-Mar-24 30-Jun-24 30-Sep-24 31-Dec-24 31-Mar-25 30-Jun-25 30-Sep-25 31-Dec-25
91 90 90 91 91 89 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
- - - - - - - - -
beginning of period 1-Jan-19 1-Apr-19 1-Jul-19 1-Oct-19 1-Jan-20 1-Apr-20 1-Jul-20 1-Oct-20
end of period 31-Mar-19 30-Jun-19 30-Sep-19 31-Dec-19 31-Mar-20 30-Jun-20 30-Sep-20 31-Dec-20
Const 1 Const 2 Units Total
number of days days 2,168 89 90 91 91 90 90 91 91
year fraction years 6 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
Timing flags:
Project start 31-May-19 1 - yes - 1 - - - - - -
Project end 31-Dec-24 1 - yes - - - - - - - -
Project period (ex start and end) 31-May-19 31-Dec-24 1 - yes - - 1 1 1 1 1 1
Project period (incl start and end) 31-May-19 31-Dec-24 1 - yes 23 - 1 1 1 1 1 1 1
Inflation assumptions
Cumulative CPI 100.99% 101.98% 102.99% 104.00% 105.02% 106.06% 107.10% 108.16%
Cumulative WPI 100.74% 101.49% 102.24% 103.00% 103.76% 104.53% 105.31% 106.09%
INCOME STATEMENT
Sales revenues $'000 21,050 - - - - 788 795 803 811
Variable costs $'000 (13,526) - - - - (519) (523) (527) (530)
EBITDA $'000 #NAME? - - - - 269 273 277 281
Depreciation $'000 #NAME? - (50) (90) (110) (123) (123) (123) (123)
Interest expense $'000 (784) - - (108) (100) (92) (84) (76) (68)
Income before tax $'000 4,290 - -50 -198 -210 54 66 78 90
Profit tax 30% $'000 (1,287) - 15 59 63 (16) (20) (23) (27)
Net income $'000 3,003 - -35 -139 -147 38 46 55 63
1-Jan-21 1-Apr-21 1-Jul-21 1-Oct-21 1-Jan-22 1-Apr-22 1-Jul-22 1-Oct-22 1-Jan-23 1-Apr-23 1-Jul-23 1-Oct-23 1-Jan-24 1-Apr-24 1-Jul-24 1-Oct-24
31-Mar-21 30-Jun-21 30-Sep-21 31-Dec-21 31-Mar-22 30-Jun-22 30-Sep-22 31-Dec-22 31-Mar-23 30-Jun-23 30-Sep-23 31-Dec-23 31-Mar-24 30-Jun-24 30-Sep-24 31-Dec-24
89 90 91 91 89 90 91 91 89 90 91 91 90 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
- - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
109.23% 110.30% 111.39% 112.49% 113.59% 114.71% 115.84% 116.99% 118.14% 119.30% 120.48% 121.67% 122.86% 124.07% 125.30% 126.53%
106.88% 107.67% 108.47% 109.27% 110.08% 110.90% 111.72% 112.55% 113.39% 114.23% 115.07% 115.93% 116.79% 117.65% 118.53% 119.41%
33 33 33 34 34 34 35 35 35 36 36 36 37 37 38 38
(21) (22) (22) (22) (22) (22) (22) (23) (23) (23) (23) (23) (23) (24) (24) (24)
11 12 12 12 12 12 12 13 13 13 13 13 14 14 14 14
30 30 30 30 31 31 31 31 33 33 33 33 33 33 33 33
89 90 91 91 89 90 91 91 89 90 91 91 90 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
983 993 1,002 1,012 1,065 1,075 1,086 1,097 1,152 1,163 1,175 1,186 1,198 1,210 1,222 1,234
(641) (646) (651) (656) (688) (693) (698) (703) (737) (742) (748) (754) (759) (765) (770) (776)
342 347 352 357 377 382 388 393 415 421 427 433 439 445 451 458
(123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (123) (73) (33) (13)
(60) (52) (44) (36) (28) (20) (12) (4) - - - - - - - -
159 172 185 198 226 240 253 267 292 298 304 310 316 372 419 445
(48) (52) (56) (59) (68) (72) (76) (80) (88) (89) (91) (93) (95) (112) (126) (134)
111 121 130 139 159 168 177 187 205 209 213 217 221 261 293 312
Economics
beginning of period 1-Jan-19 1-Apr-19 1-Jul-19 1-Oct-19 1-Jan-20 1-Apr-20 1-Jul-20 1-Oct-20
end of period 31-Mar-19 30-Jun-19 30-Sep-19 31-Dec-19 31-Mar-20 30-Jun-20 30-Sep-20 31-Dec-20
Const 1 Const 2 Units Total
year fraction years 7 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
period counter num 1 2 3 4 5 6 7 8
Inflation rates
Cumulative CPI 4% % 100.99% 101.98% 102.99% 104.00% 105.02% 106.06% 107.10% 108.16%
Cumulative WPI 3% % 100.74% 101.49% 102.24% 103.00% 103.76% 104.53% 105.31% 106.09%
Cumulative days360
Beginning of period days 180 270 360 450 540 630 720 810
End of period days 270 360 450 540 630 720 810 900
FX rates
Beginning of period FX rate 115.000 117.500 120.000 122.500 125.000 127.500 130.000 131.250
End of period FX rate 117.500 120.000 122.500 125.000 127.500 130.000 131.250 132.500
Average FX rate 116.250 118.750 121.250 123.750 126.250 128.750 130.625 131.875
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
109.23% 110.30% 111.39% 112.49% 113.59% 114.71% 115.84% 116.99% 118.14% 119.30% 120.48% 121.67% 122.86% 124.07% 125.30% 126.53%
106.88% 107.67% 108.47% 109.27% 110.08% 110.90% 111.72% 112.55% 113.39% 114.23% 115.07% 115.93% 116.79% 117.65% 118.53% 119.41%
109.23% 110.30% 111.39% 112.49% 113.59% 114.71% 115.84% 116.99% 118.14% 119.30% 120.48% 121.67% 122.86% 124.07% 125.30% 126.53%
106.88% 107.67% 108.47% 109.27% 110.08% 110.90% 111.72% 112.55% 113.39% 114.23% 115.07% 115.93% 116.79% 117.65% 118.53% 119.41%
900 990 1,080 1,170 1,260 1,350 1,440 1,530 1,620 1,710 1,800 1,890 1,980 2,070 2,160 2,250
990 1080 1170 1260 1350 1440 1530 1620 1710 1800 1890 1980 2070 2160 2250 2340
132.500 133.750 135.000 136.250 137.500 138.750 140.000 141.250 142.500 143.750 145.000 146.250 147.500 148.750 150.000 151.250
133.750 135.000 136.250 137.500 138.750 140.000 141.250 142.500 143.750 145.000 146.250 147.500 148.750 150.000 151.250 152.500
133.125 134.375 135.625 136.875 138.125 139.375 140.625 141.875 143.125 144.375 145.625 146.875 148.125 149.375 150.625 151.875
1-Jan-25 1-Apr-25 1-Jul-25 1-Oct-25
31-Mar-25 30-Jun-25 30-Sep-25 31-Dec-25
90 91 91 90 90 91 91 89 90 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
- - - 74 75 75 75 94 94 94
- - - 74 1 0 1 18 0 0
- - - 8 8 8 8 10 10 10
1-Oct-21 1-Jan-22 1-Apr-22 1-Jul-22 1-Oct-22 1-Jan-23 1-Apr-23 1-Jul-23 1-Oct-23 1-Jan-24
31-Dec-21 31-Mar-22 30-Jun-22 30-Sep-22 31-Dec-22 31-Mar-23 30-Jun-23 30-Sep-23 31-Dec-23 31-Mar-24
91 89 90 91 91 89 90 91 91 90
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
1,012 1,065 1,075 1,086 1,097 1,152 1,163 1,175 1,186 1,198
(656) (688) (693) (698) (703) (737) (742) (748) (754) (759)
167 179 179 179 181 194 194 194 196 200
72 77 77 77 77 83 82 82 83 84
144 155 154 153 155 166 165 164 166 169
10 11 11 11 11 12 12 12 12 12
1-Apr-24 1-Jul-24 1-Oct-24 1-Jan-25 1-Apr-25 1-Jul-25 1-Oct-25
30-Jun-24 30-Sep-24 31-Dec-24 31-Mar-25 30-Jun-25 30-Sep-25 31-Dec-25
90 91 91 89 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25
12 12 12 - - - -
Cash flow statement
Cash balances:
Opening $'000 - - 365 - -
Closing $'000 - 365 - - 8
Checks:
closing balances equal to BS 0 - ok - - - - - -
balances above zero 0 - ok - - - - - -
1-Apr-20 1-Jul-20 1-Oct-20 1-Jan-21 1-Apr-21 1-Jul-21 1-Oct-21 1-Jan-22 1-Apr-22 1-Jul-22 1-Oct-22 1-Jan-23 1-Apr-23 1-Jul-23
30-Jun-20 30-Sep-20 31-Dec-20 31-Mar-21 30-Jun-21 30-Sep-21 31-Dec-21 31-Mar-22 30-Jun-22 30-Sep-22 31-Dec-22 31-Mar-23 30-Jun-23 30-Sep-23
90 91 91 89 90 91 91 89 90 91 91 89 90 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
5 6 7 8 9 10 11 12 13 14 15 16 17 18
252 253 253 276 295 296 296 302 310 312 312 319 331 335
46 55 63 111 121 130 139 159 168 177 187 205 209 213
123 123 123 123 123 123 123 123 123 123 123 123 123 123
(1) (0) (1) (18) (0) (0) (1) (7) (0) (0) (1) (8) (0) (0)
84 76 68 60 52 44 36 28 20 12 4 - - -
- - - - - - - - - - - - - -
(252) (253) (253) (274) (295) (296) (296) (301) (310) (312) (312) (319) (331) (335)
(68) (77) (85) (114) (29) (22) (21) (15) (22) (22) (71) (114) (122) (122)
(100) (100) (100) (100) (100) (100) (100) (100) (100) (100) (50) - - -
(84) (76) (68) (60) (52) (44) (36) (28) (20) (12) (4) - - -
- - - - (114) (130) (139) (159) (168) (177) (187) (205) (209) (213)
0 0 0 2 0 0 0 1 0 0 0 1 0 0
8 8 8 8 10 10 10 10 11 11 11 11 12 12
8 8 8 10 10 10 10 11 11 11 11 12 12 12
- - - - - - - - - - - - - -
- - - - - - - - - - - - - -
1-Oct-23 1-Jan-24 1-Apr-24 1-Jul-24 1-Oct-24 1-Jan-25 1-Apr-25 1-Jul-25 1-Oct-25
31-Dec-23 31-Mar-24 30-Jun-24 30-Sep-24 31-Dec-24 31-Mar-25 30-Jun-25 30-Sep-25 31-Dec-25
91 90 90 91 91 89 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
19 20 21 22 23 0 0 0 0
- - - - - - - - -
0 0 0 0 0 (12) - - -
12 12 12 12 12 12 - - -
12 12 12 12 12 - - - -
- - - - - - - - -
- - - - - - - - -
Debt and equity funding
Total debt cash flow $'000 #NAME? - 1,350 (208) (200) (192) (184)
Operating cash flow $'000 #NAME? - 15 59 63 179 252
Investing cash flow $'000 #NAME? - (1,000) (800) (400) (250) -
less: min cash balance $'000 #NAME? - - - - (8) (8)
Cash balances from prior periods $'000 #NAME? - - 365 - - 8
Cash excess / (shortfall) before dividends $'000 #NAME? - 365 (584) (537) (271) 68
Cash excess / (shortfall) before equity financing $'000 365 - 365 (584) (537) (271) 68
91 91 89 90 91 91 89 90 91 91 89 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
- - - - - - - - - - - - - -
(76) (68) (60) (52) (44) (36) (28) (20) (12) (4) - - - -
(176) (168) (160) (152) (144) (136) (128) (120) (112) (54) - - - -
253 253 276 295 296 296 302 310 312 312 319 331 335 338
- - - - - - - - - - - - - -
(8) (8) (10) (10) (10) (10) (11) (11) (11) (11) (12) (12) (12) (12)
8 8 8 10 10 10 10 11 11 11 11 12 12 12
77 85 114 143 152 160 173 190 200 258 319 331 335 338
1,324 1,246 1,162 1,048 1,019 996 975 960 938 916 844 730 608 486
- - - - - - - - - - - - - -
(77) (85) (114) (29) (22) (21) (15) (22) (22) (71) (114) (122) (122) (121)
1,246 1,162 1,048 1,019 996 975 960 938 916 844 730 608 486 365
1-Jan-24 1-Apr-24 1-Jul-24 1-Oct-24 1-Jan-25 1-Apr-25 1-Jul-25 1-Oct-25
31-Mar-24 30-Jun-24 30-Sep-24 31-Dec-24 31-Mar-25 30-Jun-25 30-Sep-25 31-Dec-25
90 90 91 91 89 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
341 332 326 323 118 - - -
- - - - - - - -
(12) (12) (12) (12) - - - -
12 12 12 12 12 - - -
341 332 325 323 130 - - -
- - - - - - - -
221 261 293 312 - - - -
(221) (261) (293) (312) - - - -
- - - - - - - -
120 71 32 11 130 - - -
Total liabilities and equity $'000 - 1,315 1,660 1,950 2,274 2,154 2,031
91 89 90 91 91 89 90 91 91 89 90 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
200 248 247 247 249 267 267 267 269 288 288 288
8 10 10 10 10 11 11 11 11 12 12 12
134 166 165 165 167 179 179 179 181 194 194 194
58 72 72 72 72 77 77 77 77 83 82 82
1,710 1,588 1,465 1,343 1,220 1,098 975 853 730 608 485 363
1,910 1,835 1,712 1,589 1,469 1,365 1,242 1,119 999 896 773 650
867 794 694 593 494 405 304 203 155 166 165 164
117 144 144 143 144 155 154 153 155 166 165 164
750 650 550 450 350 250 150 50 - - - -
1,044 1,041 1,019 996 975 960 938 916 844 730 608 486
1,162 1,048 1,019 996 975 960 938 916 844 730 608 486
(118) (7) - - - - - - - - - -
1,910 1,835 1,712 1,589 1,469 1,365 1,242 1,119 999 896 773 650
- - - - - - - - - - - -
1-Oct-23 1-Jan-24 1-Apr-24 1-Jul-24 1-Oct-24 1-Jan-25 1-Apr-25 1-Jul-25 1-Oct-25
31-Dec-23 31-Mar-24 30-Jun-24 30-Sep-24 31-Dec-24 31-Mar-25 30-Jun-25 30-Sep-25 31-Dec-25
91 90 90 91 91 89 90 91 91
0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
240 118 45 13 - - - - -
- - - - - - - - -
Grouping numbers by years
Total liabilities and equity $'000 1,950 1,910 1,469 999 530 171 -
beginning of period 1-Jan-19 1-Apr-19 1-Jul-19 1-Oct-19 1-Jan-20 1-Apr-20 1-Jul-20 1-Oct-20
end of period 31-Mar-19 30-Jun-19 30-Sep-19 31-Dec-19 31-Mar-20 30-Jun-20 30-Sep-20 31-Dec-20
Units Total
Financial results
1 1 1 1 1 1 1 1 1 1 1 1 1 1
114 143 152 160 173 190 200 258 319 331 335 338 341 332
- - - - - - - - - - - - - -
114 29 22 21 15 22 22 71 114 122 122 121 120 71
- 114 130 139 159 168 177 187 205 209 213 217 221 261
(1,048) (905) (753) (593) (420) (229) (30) 228 547 878 1,213 1,552 1,893 2,225
- - - - - - - 1 1 1 1 1 1 1
- - - - - - - 1 1 1 1 1 1 1
1-Jul-24 1-Oct-24 1-Jan-25 1-Apr-25 1-Jul-25 1-Oct-25
30-Sep-24 31-Dec-24 31-Mar-25 30-Jun-25 30-Sep-25 31-Dec-25
1 1 - - - -
1 1 1 1 1 1
1 1 - - - -
Checks and controls in financial models (continued)
2) Check for the changes, trends, unusual movements using an "instant" chart:
- select a range of numbers and press Alt+F1
- a column chart will come up
- looking at this chart you can quickly check and notice certain errors or inconsistencies
Some amounts 11 12 18 14 15 16
=VAR.P(D47:G47)=0 0 5 5 5 4
Example 1 Example 2
without empty row with empty row
Original tables
This is what happens if you insert a new row and forget to update a formula (in Example 1)
EBT 51 68 79 87 99 100
Tax 30% -15 -20 -24 -26 -30 -30
Net income 36 48 55 61 69 70
Loan:
Opening balance 1,000 964 917 862 801 732
Repayment -36 -48 -55 -61 -69 -70
Closing balance 964 917 862 801 732 661
Loan:
Opening balance 1,000 930 850 763 673 577
Repayment -70 -81 -86 -90 -96 -95
Closing balance 930 850 763 673 577 483
Loan:
Opening balance 1,000 956 900 838 772 698
Repayment -44 -56 -62 -65 -74 -76
Closing balance 956 900 838 772 698 622
Loan:
Opening balance 1,000 957 898 835 768 698
Repayment -43 -58 -64 -67 -70 -71
Closing balance 957 898 835 768 698 626
Loan:
Opening balance 1,000 957 898 834 768 698
Repayment -43 -58 -64 -67 -70 -71
Closing balance 957 898 834 768 698 626
Number formats
Referencing colors:
By name: By index:
Black 1 2 3 4 5 6 7
White 8 9 10 11 12 13 14
Red 15 16 17 18 19 20 21
Green 22 23 24 25 26 27 28
Blue 29 30 31 32 33 34 35
Yellow 36 37 38 39 40 41 42
Magenta 43 44 45 46 47 48 49
Cyan 50 51 52 53 54 55 56
Building trend forecasts
400
Actual
CAGR
FAGR
300
200
100
0
2013 2014 2015 2016 2017 2018 2019 2020 2021