Create Time Value of Money Tables in Excel
Are you a student? Did you know that Amazon is offering 6 months of Amazon Prime - free two-day shipping, free movies, and other benefits - to students? Click here to learn more
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 rate/number of period combinations. My 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. My tables can be reformatted to show up to 15 decimal places (not that you want that many). Thus, they can be more accurate.
- Traditional annuity tables (PVIFA and FVIFA) in most textbooks only work for regular annuities. With my tables you can instantly change the table from regular annuities to annuities due with only a single click.
As 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.
You can download a complete copy of the Time Value of Money Interest Factors 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. So, 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 PVIF (Present Value Interest Factor) 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.
Let's look at an example:
Imagine that you need to have $5,000 three years from now and can earn 4% per year in your savings account. How much do you need to deposit today in order to achieve your goal?
To solve this problem, we simply multiply the future value ($5,000) by the appropriate PVIF table value:
PV = FV x PVIF
So, look down the first column of the table for the 3 period row, and then across to the 4% column. The PVIF is 0.8890 so the answer is:
PV = 5,000 x 0.8890 = 4,445
Therefore, if you deposit $4,445 today in a saving account that pays 4% interest compounded annually, then you will have $5,000 in three years.
But what happens if the interest rate is 3.5% instead of 3% or 4%? Then you have to interpolate because 3.5% is not in the table. You can approximate the answer by averaging the PVIF table values for 3% and 4% and using that average for the PVIF. The average is 0.90205 so you would get an answer of $4,510.25. The correct answer, though, is $4,509.71 so your answer would be off by about $0.54. Not 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. For example, the PVIF factors from the table above are calculated by using $1 for the FV in the equation for present value:
Substituting 1 for FV, 3 for N, and 0.04 for i we get 0.8890. That is the same as the PVIF that we originally pulled from the table. Since we are building these tables with Excel, we can use its built-in functions (PV() in this case) instead of the mathematical formula.
Two-Input Data Tables
Rather than creating a large table with the PV() 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. For 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 FV is $1 instead of some other value. The snippet below shows the formulas that are in the PVIF table from above:
Note that the PV() 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 Data Table command. It works by substituting the a value from the top row and left column into the cells specified (F1 and F2). 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 Automatic Except for Data Tables. We don't need to use that setting here, but you should be aware that it exists.
We will see how to create the data table in section below.
Create the PVIF Table
Our PVIF table will serve as a template for each of the other three tables. Once we get this working properly, we can simply copy the worksheet and then change the formula that drives the table.
Open a new workbook and then create a worksheet that looks like the one below:
Enter everything exactly as shown, except for the following:
- In A10 enter the formula: =PV(F1,F2,0,-1). This is the formula that will drive our data table. The 0.9901 in the picture is simply the current result of the formula.
- In B10 enter the formula: =B1.
- In C10 enter the formula: =B10+$B$2. This will "step up" the interest rate. Copy this formula across to AE10 (that is 30 columns of interest rates).
- In A11 enter the formula: =B3.
- In A12 enter the formula: =A11+$B$4. Copy this formula down through A70. This will "step up" the period number by the number of units specified in B4.
- Do not add the shading in row 10. We will do that with Conditional Formatting later on.
Before creating the data table, I should explain the data in E1:F2. This is the area (specifically, F1 and F2) where Excel will substitute the values from the top row and left column to get the numbers to paste into the table. You can try it yourself: enter 4% into F1 and 3 into F2. Notice that the value in A10 has changed to 0.8890. That is the same value that we used for the PVIF in the original example problem above.
So, essentially what happens in the data table is that Excel will plug numbers into F1 and F2 and then recalculate the formula in A10. 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 (B11:AE70).
To create the data table we need to select A10:AE70 and then go to the Data tab, click the What-If Analysis button, and then choose Data Table. You will now see the following dialog box:
This is where you tell Excel that cell F1 is where to plug in the numbers from the top row of the table (the interest rates) and that F2 is where to plug in the numbers from the left column (the period numbers). Please note that the actual numbers in F1 and F2 do not matter at all because Excel is going to replace them to create the table. Again, this is a two-input data table. You 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. Your worksheet should now look like the one below, except for the shading in row 10.
At this point the PVIF table is fully functional. If you change the value in B1, for example, then the interest rates in the table will change, and the interest factors will be recalculated as well. However, we need to clean this up a bit to make it more functional.
Make it Fancy Using Formatting Techniques
Formatting isn't just 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 TVM tables more flexible and functional.
Hiding Text and Custom Number Formatting
Let's take care of a couple of simple items first. We don't need to see the contents of E1:F2, so we can hide those cells by setting the font color to white.
Also, we don't need to see the number in A10. In fact, it just confuses things. So, we will apply a custom format to display the text "Period" instead of the result of the formula. Note that this does not change the formula or the result, only what appears in the cell.
To set the custom number format, select A10 and then right click and choose Format Cells. Go to the Number tab and choose the Custom category. In the Type edit box, enter "Period" (include the quotation marks). This tells Excel to display the word "Period" regardless of the result of the formula. Click the OK button to apply the custom number format. Note that if you look at the formula bar you will see that the formula is still there. Only the formatting of the result has been changed.
Let's set one more custom number format, this time in A11:A70. We want the period numbers to have two decimal places and to be roughly centered in column A. The format mask to do that is 0.00_______). Note that the underscores add spaces to the number format, and that the right paren at the end is required.
Applying Conditional Formatting Rules
Conditional 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 Conditional Formatting button on the Home tab of the ribbon. Choose New Rule from the menu. We want to create rules that are based on formulas, so choose the last item in the Rule Type list (Use a formula to determine which cells to format). This leads to the following dialog box:
You can see how the rules are created. They must be formulas that will evaluate to either True or False. 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. Select A10:AE10 and then call up the dialog box above. We 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 B6). So, the rule will be:
We need to add 1 to the number of columns because we are including column A, which is not a part of the 30 columns specified. Apply a format by clicking the Format button and apply some borders, background shading, and a bold font. Click OK to apply the formatting rule. To test it, change B6 to, say, 10 and make sure that only A10:K10 have this format. If you change B6 to 15, then A10:P10 should have the format.
For the second rule we want to apply a border to the right edge of column A, but only those rows that are supposed to be visible in the table. Select A10:A70 and then create this formatting rule:
This rule checks to see that it is in column A and that the row number is in the visible range. Apply 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 B5:B6. Select the entire table (A10:AE70) 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:
Apply a border to the bottom using the Format button. Note that if some of your rules don't work properly, you can always go back and edit them by choosing Manage Rules from the Conditional Formatting drop-down.
Applying Data Validation Rules
For the final touch, we want to make sure that a user cannot enter data that is unexpected in B1:B6. For example, we don't want them to enter a negative interest rate in B1. We can do this by applying some data validation rules to those cells.
Select B1 and then click the Data Validation button on the Data tab. This will launch the following dialog box:
For the interest rate we want to allow any decimal number between 0 and 0.99 (0% to 99%), though you may want to set a lower maximum. Choose Decimal from the Allow list, between from the Data list, set the minimum to 0, and the maximum to 0.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.
Set up similar rules for B2:B6 as follows:
- B2 - Decimal between 0 and 0.25 (0 to 25%)
- B3 - Whole number between 1 and 100
- B4 - Whole number between 1 and 25
- B5 - Whole number between 1 and 60
- B6 - Whole number between 1 and 30
That completes the PVIF table. The others are almost done as well!
Creating the FVIF Table
The FVIF (Future Value Interest Factor) table is identical to the PVIF table, except that it uses the FV() function in A10 and different text in A9. So we will simply copy the PVIF worksheet. Right click the sheet tab for the PVIF sheet and choose "Move or Copy" from the menu. Be sure to click the Create a Copy box at the bottom of the dialog box.
Change the text in A9 to "Future Value of $1 Invested Today at the End of N Periods (FVIF)" and the formula in A10 to =FV(F1,F2,0,-1). That's it. Here is a small piece of the FVIF table so that you can be sure that yours is correct:
Creating the PVIFA Table
The PVIFA (Present Value Interest Factor Annuity) table is only slightly more complicated, but start by creating another copy of the PVIF table. The complication is because we want the table to handle both regular annuities and annuities due.
Start by adding some data in row 7. In A7 enter "Type" (for the type of annuity). In B7 we will enter another data validation rule. Click B7 and then the Data Validation button. This time we want to set the Allow to List and then the Souce to "Regular, Due" (do not type the quotes, but do include the comma). This will provide the user with a drop-down list from which they can choose the type of annuity.
For the text in A9 we need to specify slightly different text depending on the type of annuity. We will use the following IF() statement:
=IF(B7="Regular","Present Value of an Annuity of $1 per Period for N Periods (PVIFA)","Present Value of an Annuity Due of $1 per Period for N Periods (PVIFAd)")
Finally, in A10 we will use the PV() function again, but this time we will set FV to 0 and PMT to 1. Additionally, we need to specify the Type argument to the function. For regular annuities this argument is 0, but for annuities due it is 1. The formula in A10 is:
Here is a snippet of the table as it appears for regular annuities:
If you change to an annuity due (in B7) then, for reference, you should get 1.000 in B11 and 1.9901 in B12.
Creating the FVIFA Table
To create the FVIFA (Future Value Interest Factor Annuity) table, start by copying the PVIFA table that we created above. The tables are almost identical, except for the text in A9 and the formula in A10.
For the text in A9 use the following IF() statement:
=IF(B7="Regular","Future Value of an Annuity of $1 per Period at the End of N Periods (FVIFA)","Future Value of an Annuity Due of $1 per Period at the End of N Periods (FVIFAd)")
In A10, we need to change the PV() function to FV() as follows:
Note that we still need slightly different formulas, depending on the type of annuity as described above. Your FVIFA table should look like the one below:
For reference, if you change B7 to an annuity due you should get 1.0100 in B11 and 2.0301 in B12.
You can download a complete copy of the Time Value of Money Interest Factors workbook.