You are on page 1of 11

Create Time Value of Money Tables in Excel

Virtually every finance textbook has, at the back, a series of tables that contain multipliers that
can be used to easily calculate present or future values without the need for a financial calculator.
In recent years these tables have slowly given way to financial calculators, but they are still
widely used by some professors and on some professional exams.
This tutorial will demonstrate how to create these tables using Excel. The tables created here are
much better than the textbook tables because they overcome a couple of limitations:
Traditional tables only contain a few interest ratenumber of period combinations. !y
tables allow you the flexibility to show almost any number of combinations. This
eliminates the need for interpolation.
Traditional tables have limited accuracy because they typically only display the interest
factors to four decimal places. !y tables can be reformatted to show up to "# decimal
places $not that you want that many%. Thus, they can be more accurate.
Traditional annuity tables $&VI'( and 'VI'(% in most textbooks only work for regular
annuities. )ith my tables you can instantly change the table from regular annuities to
annuities due with only a single click.
(s noted, these tables provide a great deal of flexibility. This flexibility is achieved using
standard Excel features such as time value of money functions, two*input data tables, data
validation, and conditional formatting.
+ou can download a complete copy of the Time Value of !oney Interest 'actors workbook.
Using the TVM Tables
Time value of money tables are very easy to use because they provide a ,factor, that is
multiplied by a present value, future value, or annuity payment to find the answer. -o, armed
with the appropriate table and a way to multiply $any calculator or even with pencil and paper%
you too can easily solve time value of money problems.
The image below shows a snippet of a &VI' $&resent Value Interest 'actor% table:
In this case, the table provides a factor that is multiplied by a future value of a lump sum cash
flow in order to obtain its present value.
.et/s look at an example:
Imagine that you need to have 0#,111 three years from now and can earn 23 per year in your
savings account. 4ow much do you need to deposit today in order to achieve your goal5
To solve this problem, we simply multiply the future value $0#,111% by the appropriate &VI'
table value:
&V 6 'V x &VI'
-o, look down the first column of the table for the 7 period row, and then across to the 23
column. The &VI' is 1.8891 so the answer is:
&V 6 #,111 x 1.8891 6 2,22#
Therefore, if you deposit 02,22# today in a saving account that pays 23 interest compounded
annually, then you will have 0#,111 in three years.
:ut what happens if the interest rate is 7.#3 instead of 73 or 235 Then you have to interpolate
because 7.#3 is not in the table. +ou can approximate the answer by averaging the &VI' table
values for 73 and 23 and using that average for the &VI'. The average is 1.91;1# so you would
get an answer of 02,#"1.;#. The correct answer, though, is 02,#19.<" so your answer would be
off by about 01.#2. =ot too bad, but the tables that we create here can easily have the exact
interest rate that you need.
Creating the Interest Factor Tables
The key to creating the tables is to understand that they are all based upon the basic time value of
money formulas. 'or example, the &VI' factors from the table above are calculated by using 0"
for the 'V in the e>uation for present value:
-ubstituting " for 'V, 7 for =, and 1.12 for i we get 1.8891. That is the same as the &VI' that we
originally pulled from the table. -ince we are building these tables with Excel, we can use its
built*in functions $&V$% in this case% instead of the mathematical formula.
Two-Input Data Tables
?ather than creating a large table with the &V$% function repeated over and over again, we will
use Excel/s two*input data table feature. This allows us to enter a formula once, and then it will
automatically populate the table based on values in the left column and top row of the table. This
feature is typically used for sensitivity analysis. 'or example, we might want to see how the
present value changes when both the interest rate and number of periods changes. In fact, that is
what we are doing here, except that the 'V is 0" instead of some other value. The snippet below
shows the formulas that are in the &VI' table from above:
=ote that the &V$% function is only used in the upper*left corner of the table. The rest of the table
is filled in automatically when we use the @ata Table command. It works by substituting the a
value from the top row and left column into the cells specified $'" and ';%. Excel does this
repeatedly to fill in the table. Table recalculation can be slow for large tables or complicated
formulas, so one of Excel/s calculation options is to (utomatic Except for @ata Tables. )e don/t
need to use that setting here, but you should be aware that it exists.
)e will see how to create the data table in section below.
Create the VIF Table
Aur &VI' table will serve as a template for each of the other three tables. Ance we get this
working properly, we can simply copy the worksheet and then change the formula that drives the
Apen a new workbook and then create a worksheet that looks like the one below:
Enter everything exactly as shown, except for the following:
In ("1 enter the formula: 6&V$'",';,1,*"%. This is the formula that will drive our data
table. The 1.991" in the picture is simply the current result of the formula.
In :"1 enter the formula: 6:".
In B"1 enter the formula: 6:"1C0:0;. This will ,step up, the interest rate. Bopy this
formula across to (E"1 $that is 71 columns of interest rates%.
In ("" enter the formula: 6:7.
In ("; enter the formula: 6(""C0:02. Bopy this formula down through (<1. This will
,step up, the period number by the number of units specified in :2.
@o not add the shading in row "1. )e will do that with Bonditional 'ormatting later on.
:efore creating the data table, I should explain the data in E":';. This is the area $specifically,
'" and ';% where Excel will substitute the values from the top row and left column to get the
numbers to paste into the table. +ou can try it yourself: enter 23 into '" and 7 into ';. =otice
that the value in ("1 has changed to 1.8891. That is the same value that we used for the &VI' in
the original example problem above.
-o, essentially what happens in the data table is that Excel will plug numbers into '" and '; and
then recalculate the formula in ("1. The results will be placed into an array at the intersection of
the appropriate row and column. The Table$% function will display that array in our table area
To create the data table we need to select ("1:(E<1 and then go to the @ata tab, click the )hat*
If (nalysis button, and then choose @ata Table. +ou will now see the following dialog box:
This is where you tell Excel that cell '" is where to plug in the numbers from the top row of the
table $the interest rates% and that '; is where to plug in the numbers from the left column $the
period numbers%. &lease note that the actual numbers in '" and '; do not matter at all because
Excel is going to replace them to create the table. (gain, this is a two*input data table. +ou can
also create a one*input data table by specifying only the row or column input cell, but that
wouldn/t suit the purpose here. +our worksheet should now look like the one below, except for
the shading in row "1.
(t this point the &VI' table is fully functional. If you change the value in :", for example, then
the interest rates in the table will change, and the interest factors will be recalculated as well.
4owever, we need to clean this up a bit to make it more functional.
Ma!e it Fancy Using Formatting Techni"ues
'ormatting isn/t Dust for making your spreadsheet pretty. It can also add to the functionality. In
this section we will see how to apply several different kinds of formatting and data validation
rules to make the TV! tables more flexible and functional.
#i$ing Text an$ Custom %umber Formatting
.et/s take care of a couple of simple items first. )e don/t need to see the contents of E":';, so
we can hide those cells by setting the font color to white.
(lso, we don/t need to see the number in ("1. In fact, it Dust confuses things. -o, we will apply a
custom format to display the text ,&eriod, instead of the result of the formula. =ote that this does
not change the formula or the result, only what appears in the cell.
To set the custom number format, select ("1 and then right click and choose 'ormat Bells. Eo to
the =umber tab and choose the Bustom category. In the Type edit box, enter ,&eriod, $include
the >uotation marks%. This tells Excel to display the word ,&eriod, regardless of the result of the
formula. Blick the AF button to apply the custom number format. =ote that if you look at the
formula bar you will see that the formula is still there. Anly the formatting of the result has been
.et/s set one more custom number format, this time in ("":(<1. )e want the period numbers to
have two decimal places and to be roughly centered in column (. The format mask to do that is
1.11GGGGGGG%. =ote that the underscores add spaces to the number format, and that the right
paren at the end is re>uired.
&pplying Con$itional Formatting 'ules
Bonditional formatting changes the look of a cell or range when certain conditions are met. To
set up the rules, select a cell or range and then click the Bonditional 'ormatting button on the
4ome tab of the ribbon. Bhoose =ew ?ule from the menu. )e want to create rules that are based
on formulas, so choose the last item in the ?ule Type list $Hse a formula to determine which cells
to format%. This leads to the following dialog box:
+ou can see how the rules are created. They must be formulas that will evaluate to either True or
'alse. Exit from the dialog box so that we can start creating new rules.
The first rule will create the shading and borders for the top row of our table. -elect ("1:(E"1
and then call up the dialog box above. )e only want to apply the format to the cells if they are in
the ,visible, part of the table $that is, the column is within the range specified by the number of
columns in :I%. -o, the rule will be:
)e need to add " to the number of columns because we are including column (, which is not a
part of the 71 columns specified. (pply a format by clicking the 'ormat button and apply some
borders, background shading, and a bold font. Blick AF to apply the formatting rule. To test it,
change :I to, say, "1 and make sure that only ("1:F"1 have this format. If you change :I to "#,
then ("1:&"1 should have the format.
'or the second rule we want to apply a border to the right edge of column (, but only those rows
that are supposed to be visible in the table. -elect ("1:(<1 and then create this formatting rule:
This rule checks to see that it is in column ( and that the row number is in the visible range.
(pply a format with a border on the right edge only, and set the font to bold.
The third rule will hide everything outside of the visible part of the table as defined by the values
in :#::I. -elect the entire table $("1:(E<1% and then use this rule:
In the format, set the font color to white. That will preserve the data, but it will be invisible
because the font color is the same as the background color.
The fourth, and final, rule will underline the last visible row, but only in visible columns. The
rule is:
(pply a border to the bottom using the 'ormat button. =ote that if some of your rules don/t work
properly, you can always go back and edit them by choosing !anage ?ules from the Bonditional
'ormatting drop*down.
&pplying Data Vali$ation 'ules
'or the final touch, we want to make sure that a user cannot enter data that is unexpected in
:"::I. 'or example, we don/t want them to enter a negative interest rate in :". )e can do this
by applying some data validation rules to those cells.
-elect :" and then click the @ata Validation button on the @ata tab. This will launch the
following dialog box:
'or the interest rate we want to allow any decimal number between 1 and 1.99 $13 to 993%,
though you may want to set a lower maximum. Bhoose @ecimal from the (llow list, between
from the @ata list, set the minimum to 1, and the maximum to 1.99. If you choose, you can set an
input message that will popup when the cell is selected, and an error message that is displayed if
the user enters a number outside of the allowable range.
-et up similar rules for :;::I as follows:
:; * @ecimal between 1 and 1.;# $1 to ;#3%
:7 * )hole number between " and "11
:2 * )hole number between " and ;#
:# * )hole number between " and I1
:I * )hole number between " and 71
That completes the &VI' table. The others are almost done as wellL
Creating the FVIF Table
The 'VI' $'uture Value Interest 'actor% table is identical to the &VI' table, except that it uses
the 'V$% function in ("1 and different text in (9. -o we will simply copy the &VI' worksheet.
?ight click the sheet tab for the &VI' sheet and choose ,!ove or Bopy, from the menu. :e sure
to click the Breate a Bopy box at the bottom of the dialog box.
Bhange the text in (9 to ,'uture Value of 0" Invested Today at the End of = &eriods $'VI'%,
and the formula in ("1 to 6'V$'",';,1,*"%. That/s it. 4ere is a small piece of the 'VI' table so
that you can be sure that yours is correct:
Creating the VIF& Table
The &VI'( $&resent Value Interest 'actor (nnuity% table is only slightly more complicated, but
start by creating another copy of the &VI' table. The complication is because we want the table
to handle both regular annuities and annuities due.
-tart by adding some data in row <. In (< enter ,Type, $for the type of annuity%. In :< we will
enter another data validation rule. Blick :< and then the @ata Validation button. This time we
want to set the (llow to .ist and then the -ouce to ,?egular, @ue, $do not type the >uotes, but do
include the comma%. This will provide the user with a drop*down list from which they can
choose the type of annuity.
'or the text in (9 we need to specify slightly different text depending on the type of annuity. )e
will use the following I'$% statement:
6I'$:<6,?egular,,,&resent Value of an (nnuity of 0" per &eriod for = &eriods
$&VI'(%,,,&resent Value of an (nnuity @ue of 0" per &eriod for = &eriods $&VI'(d%,%
'inally, in ("1 we will use the &V$% function again, but this time we will set 'V to 1 and &!T to
". (dditionally, we need to specify the Type argument to the function. 'or regular annuities this
argument is 1, but for annuities due it is ". The formula in ("1 is:
4ere is a snippet of the table as it appears for regular annuities:
If you change to an annuity due $in :<% then, for reference, you should get ".111 in :"" and
".991" in :";.
Creating the FVIF& Table
To create the 'VI'( $'uture Value Interest 'actor (nnuity% table, start by copying the &VI'(
table that we created above. The tables are almost identical, except for the text in (9 and the
formula in ("1.
'or the text in (9 use the following I'$% statement:
6I'$:<6,?egular,,,'uture Value of an (nnuity of 0" per &eriod at the End of = &eriods
$'VI'(%,,,'uture Value of an (nnuity @ue of 0" per &eriod at the End of = &eriods $'VI'(d%,%
In ("1, we need to change the &V$% function to 'V$% as follows:
=ote that we still need slightly different formulas, depending on the type of annuity as described
above. +our 'VI'( table should look like the one below:
'or reference, if you change :< to an annuity due you should get ".1"11 in :"" and ;.171" in
+ou can download a complete copy of the Time Value of !oney Interest 'actors workbook.