Excel Amortization Schedule Generator
Build a loan amortization schedule with a payment row for every period, split into interest and principal.
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Loan Amortization Schedule | ||||||
| 2 | |||||||
| 3 | Loan amount | 250000 | Payment | =-PMT(B4/B6,B5*B6,B3) | |||
| 4 | Annual rate | 0.055 | Total paid | =SUM(C9:C368)+SUM(D9:D368)+SUM(F9:F368) | |||
| 5 | Term (years) | 30 | Total interest | =SUM(C9:C368) | |||
| 6 | Payments per year | 12 | |||||
| 7 | |||||||
| 8 | Payment # | Payment | Interest | Principal | Balance | Extra payment | |
| 9 | 1 | =IF(B3<=0,"",MIN(E3,B3+B3*B4/B6)) | =IF(B3<=0,"",B3*B4/B6) | =IF(B3<=0,"",B9-C9) | =IF(B3<=0,"",MAX(0,B3-D9-N(F9))) | ||
| 10 | 2 | =IF(E9<=0,"",MIN(E3,E9+E9*B4/B6)) | =IF(E9<=0,"",E9*B4/B6) | =IF(E9<=0,"",B10-C10) | =IF(E9<=0,"",MAX(0,E9-D10-N(F10))) | ||
| 11 | 3 | =IF(E10<=0,"",MIN(E3,E10+E10*B4/B6)) | =IF(E10<=0,"",E10*B4/B6) | =IF(E10<=0,"",B11-C11) | =IF(E10<=0,"",MAX(0,E10-D11-N(F11))) | ||
| 12 | 4 | =IF(E11<=0,"",MIN(E3,E11+E11*B4/B6)) | =IF(E11<=0,"",E11*B4/B6) | =IF(E11<=0,"",B12-C12) | =IF(E11<=0,"",MAX(0,E11-D12-N(F12))) | ||
| 13 | 5 | =IF(E12<=0,"",MIN(E3,E12+E12*B4/B6)) | =IF(E12<=0,"",E12*B4/B6) | =IF(E12<=0,"",B13-C13) | =IF(E12<=0,"",MAX(0,E12-D13-N(F13))) | ||
| 14 | 6 | =IF(E13<=0,"",MIN(E3,E13+E13*B4/B6)) | =IF(E13<=0,"",E13*B4/B6) | =IF(E13<=0,"",B14-C14) | =IF(E13<=0,"",MAX(0,E13-D14-N(F14))) | ||
| 15 | 7 | =IF(E14<=0,"",MIN(E3,E14+E14*B4/B6)) | =IF(E14<=0,"",E14*B4/B6) | =IF(E14<=0,"",B15-C15) | =IF(E14<=0,"",MAX(0,E14-D15-N(F15))) | ||
| 16 | 8 | =IF(E15<=0,"",MIN(E3,E15+E15*B4/B6)) | =IF(E15<=0,"",E15*B4/B6) | =IF(E15<=0,"",B16-C16) | =IF(E15<=0,"",MAX(0,E15-D16-N(F16))) | ||
| 17 | 9 | =IF(E16<=0,"",MIN(E3,E16+E16*B4/B6)) | =IF(E16<=0,"",E16*B4/B6) | =IF(E16<=0,"",B17-C17) | =IF(E16<=0,"",MAX(0,E16-D17-N(F17))) | ||
| 18 | 10 | =IF(E17<=0,"",MIN(E3,E17+E17*B4/B6)) | =IF(E17<=0,"",E17*B4/B6) | =IF(E17<=0,"",B18-C18) | =IF(E17<=0,"",MAX(0,E17-D18-N(F18))) | ||
| 19 | 11 | =IF(E18<=0,"",MIN(E3,E18+E18*B4/B6)) | =IF(E18<=0,"",E18*B4/B6) | =IF(E18<=0,"",B19-C19) | =IF(E18<=0,"",MAX(0,E18-D19-N(F19))) | ||
| 20 | 12 | =IF(E19<=0,"",MIN(E3,E19+E19*B4/B6)) | =IF(E19<=0,"",E19*B4/B6) | =IF(E19<=0,"",B20-C20) | =IF(E19<=0,"",MAX(0,E19-D20-N(F20))) | ||
| 21 | 13 | =IF(E20<=0,"",MIN(E3,E20+E20*B4/B6)) | =IF(E20<=0,"",E20*B4/B6) | =IF(E20<=0,"",B21-C21) | =IF(E20<=0,"",MAX(0,E20-D21-N(F21))) | ||
| 22 | 14 | =IF(E21<=0,"",MIN(E3,E21+E21*B4/B6)) | =IF(E21<=0,"",E21*B4/B6) | =IF(E21<=0,"",B22-C22) | =IF(E21<=0,"",MAX(0,E21-D22-N(F22))) |
Preview of the first 22 rows. Cells shown as =SUM(...) are live formulas in the downloaded workbook, not pasted numbers.
What you get
- •A summary block with monthly payment, total interest, and total cost - all formulas.
- •One row per payment showing interest, principal, and the remaining balance.
- •An optional extra-payment column that shortens the schedule as you fill it in.
- •The payment comes from PMT and every row works off the running balance, so changing the rate updates the whole table.
About this template
An amortization schedule is the payment-by-payment story of a loan: how much of each payment is interest, how much comes off what you owe, and what is left afterwards. This workbook builds that table for a loan you describe, and builds it out of formulas so it stays a working model rather than a printout.
It is for anyone holding a loan and wanting to see inside it - a mortgage, a car loan, a personal loan, a business facility - and particularly for testing overpayments, which is the question a lender's own statement never answers. It is a calculator, not a statement: it models a fixed-rate loan with equal payments and does not know about fees, insurance, or a rate that changes partway through.
The sheet opens with four input cells in B3 to B6: loan amount, annual rate, term in years, and payments per year. To their right, three summary formulas give the scheduled payment, the total paid and the total interest. Row 8 heads the schedule with Payment #, Payment, Interest, Principal, Balance and, if you asked for it, Extra payment, and one row follows for every payment in the term - 360 rows for a thirty-year monthly loan.
Everything below row 8 reads the four input cells, so the schedule is not a snapshot of the numbers you typed on this page. Change the rate in B4 after you download and all 360 rows and the summary follow it.
How to use it
- Change the loan in the sheet, not on this page - B3 to B6 are the only cells you should type in. Loan amount, annual rate, term in years, payments per year - every formula points at them, so the whole schedule re-runs the moment one changes.
- Enter the rate as a percentage - B4 is percent-formatted, so typing 5.5 gives 5.5% and the cell holds 0.055. Every row divides that annual rate by the payments-per-year cell to get the rate for one period.
- Type overpayments into the Extra payment column - Put an amount in the Extra payment cell on any row and it comes straight off that period's closing balance. Every later row recalculates from the new balance, so the interest genuinely falls rather than being averaged out.
- Watch the schedule end early - Once the balance reaches zero the remaining rows go blank instead of showing negative balances, so where the numbers stop is the payoff point. Compare Total interest in E5 before and after an overpayment to see what it saved you.
- Read the summary block - E3 is the scheduled payment from PMT, E5 the total interest over the schedule, and E4 the total paid - interest, principal and any extra payments added together. Those three are the figures worth comparing between two versions of a loan.
- Extend the table if you lengthen the term - The workbook is generated with exactly as many rows as the term you chose here. Shortening the term in the sheet is fine - surplus rows blank themselves - but lengthening it needs more rows: select the last row of the schedule and drag its fill handle down, and the formulas continue correctly because every reference is relative.
Formulas in this workbook
Every formula below is written into the workbook itself, exactly as shown. The cell references are the ones the default options produce; change the row or column counts and they shift to match.
=-PMT(B4/B6,B5*B6,B3)- The scheduled payment. PMT takes the rate for one period (annual rate divided by payments per year), the number of periods (years times payments per year) and the amount borrowed. It returns a negative number because it is money leaving you, so the formula negates it to keep the sheet readable.=IF(E9<=0,"",E9*B4/B6)- Interest for a period: the balance carried in from the row above, times the annual rate, divided by the number of payments a year. It is calculated from the running balance rather than with IPMT, which is what keeps it honest once an extra payment has changed that balance.=IF(E9<=0,"",B10-C10)- Principal: the payment for the row minus the interest for the row. Whatever the interest does not consume comes off the debt, which is why the principal column grows over the life of the loan while the interest column shrinks.=IF(E9<=0,"",MAX(0,E9-D10-N(F10)))- The closing balance: the previous balance, less the principal, less anything typed into the Extra payment cell. N() turns an empty extra-payment cell into a zero rather than an error, and MAX(0, ...) stops the last row overshooting into a negative balance.=IF(E9<=0,"",MIN(E3,E9+E9*B4/B6))- The payment column: the scheduled payment, unless what is left plus its interest is less than that - in which case you only pay what you owe. This is the formula that makes the final payment smaller than all the others.=SUM(C9:C368)- Total interest, summing the whole interest column. Total paid uses the same idea across the interest, principal and extra-payment columns, so it reflects what actually leaves your account rather than the original plan.
Customising it
- Add a date column: put the first payment date in the empty column to the right of the schedule and =EDATE(G9,1) beneath it for a monthly loan (or =G9+14 for fortnightly), then fill down to date every row.
- Track interest to date with a running total such as =SUM($C$9:C9) filled down a spare column - it shows how much of the loan's cost you have already met.
- Highlight the crossover point where the principal first exceeds the interest by selecting the schedule and adding a conditional format with the rule =$D9>$C9.
- Compare two loans by copying the sheet and changing one input on the copy - a rate, a term, a deposit - then reading Total interest on both. That is the comparison lenders' calculators rarely put side by side.
- Match a lender's statement to the cent by wrapping the payment cell in ROUND, for example =ROUND(-PMT(B4/B6,B5*B6,B3),2), since real lenders round the instalment before they apply it.
Frequently Asked Questions
Because the payment column is capped at what is actually outstanding: it takes the lower of the scheduled payment and the remaining balance plus that period's interest. A fixed instalment almost never divides exactly into a loan, so the last one is a remainder. That is also how real lenders close a loan out.
Those functions describe the original, unaltered plan. The moment you type an overpayment, the interest they report stops matching the balance column beside it, and a schedule that disagrees with itself is worse than no schedule. Working from the running balance keeps every row consistent with the one above it.
It is already wired in. Each balance formula subtracts N() of the extra-payment cell, and N() reads an empty cell as zero, so the column costs you nothing until you use it. Type an amount on any row and that row and every row after it recalculate.
Every row is wrapped in a check on the previous balance. Once the loan is repaid - which happens early if you have been overpaying - the rest of the rows return empty strings rather than negative balances and imaginary interest. The last filled row is your payoff.
Not directly - the rate cell applies to every row. You can approximate it by copying the closing balance at the change point into a second copy of the sheet as the new loan amount, with the remaining term as the new term.