Building a Loan Payment Schedule in Excel That Actually Works
The first thing most people get wrong is assuming the built-in PMT function gives them the complete picture. It doesn't. PMT only returns the periodic payment amount. What you actually need is a schedule that shows how each payment splits between principal and interest over the life of the loan, and how the remaining balance shrinks with every payment. Set up your template with a header row containing these columns: Payment Number, Payment Date, Beginning Balance, Payment Amount, Principal Portion, Interest Portion, Ending Balance, and Cumulative Principal Paid. Put your loan parameters in a separate area above the schedule—Loan Amount, Annual Interest Rate, Loan Term in Months, Start Date. Naming these cells makes the rest of the template significantly easier to maintain. For the Payment Number column, just fill down 1, 2, 3 through the total number of payments. The Payment Date formula is straightforward: =EDATE(Start_Date, Payment_Number). This handles month-end rollovers automatically, which saves you from the headache of manually adjusting payments that fall on the 31st of months that don't have 31 days. I learned that the hard way on a commercial property loan where I had payment dates on the 31st going through months like February and April.
The Beginning Balance for payment 1 is just your Loan Amount. For every row after that, it's the Ending Balance from the previous row. This circular reference style is intentional and keeps the math clean.
Using a Loan Payment Schedule Excel Template Correctly
The Payment Amount column uses PMT with a negated rate and term: =-PMT(Annual_Rate/12, Loan_Term_Months, Loan_Amount). The negation flips the sign so the payment displays as a positive number. Without it, Excel shows negative payments because it treats outgoing cash flows as negative by convention. This trips up everyone at least once. For the Principal Portion, use PPMT: =PPMT(Rate_Per_Period, Payment_Number, Total_Payments, Loan_Amount). For Interest: =IPMT(Rate_Per_Period, Payment_Number, Total_Payments, Loan_Amount). Both functions return negative values, so wrap them in ABS() or subtract them from the total payment if you want them displayed as positive numbers. I usually subtract from the Payment Amount column since it's more explicit about where the number is coming from. The Ending Balance formula is =Beginning_Balance - Principal_Portion. Simple, but easy to mess up if you reference the wrong cell. I've seen templates where the Ending Balance incorrectly references the original loan amount instead of the previous row's balance, which silently corrupts the entire schedule after payment 1.
Get the Full Details

Here's something most template guides don't mention: the PPMT and IPMT functions assume payments are made at the end of each period. If your loan requires beginning-of-period payments, add a third argument of 1 to both functions. Most consumer loans are end-of-period, but commercial leases and some rent structures are beginning-of-period. Getting this wrong shifts every payment's principal and interest split by one period, and the discrepancy compounds over time. Cumulative Principal Paid is just a running SUM from the first row down to the current row. You can verify the schedule is correct by checking that the final Cumulative Principal equals your original Loan Amount plus or minus a few cents from rounding. If it's off by more than that, you have a reference error somewhere in the template. I ran into a specific issue last year building a Loan Payment Schedule Excel Template for a borrower who was making irregular extra payments toward principal. The standard amortization schedule doesn't account for this because every row assumes the same payment amount. What I ended up doing was adding a column for "Extra Principal Payment" and adjusting the Beginning Balance for the next row to reflect the additional paydown. The PPMT and IPMT formulas still work, but you have to recalculate the remaining term because the loan pays off early. I used the NPER function in reverse—plugging in the new remaining balance and solving for how many payments are left—which gave me a dynamic endpoint instead of a fixed schedule.
Another thing to watch: Excel's PMT, PPMT, and IPMT functions round each period's calculation to two decimal places by default, but the underlying math carries more precision. Over a 30-year mortgage with 360 payments, this can create a discrepancy of $2 or $3 between what your schedule shows and what the actual final payment should be. Some lenders handle this with a "balloon adjustment" on the last payment, and your template should account for that by allowing the final row to override the formula with a manually entered figure. If your loan has a variable rate, this template breaks down completely. PMT calculates based on a single fixed rate. You'd need to restructure the entire schedule for each rate adjustment period, which is possible but tedious. In those cases, a database or dedicated loan servicing platform is genuinely better than fighting with Excel formulas. For tax reporting purposes, the Interest column is what matters most. Lenders send out Form 1098 in the US showing total interest paid for the year, and your schedule should let you sum the Interest column by calendar year. Add a helper row or use SUMIF with a year extraction from the Payment Date column to group interest by tax year. This saves time during tax season when someone asks for interest breakdowns.
The one scenario where this approach fails entirely is loans with grace periods, payment deferrals, or graduated payment structures. If the payment amount changes during the loan term for reasons other than prepayment, you'd need multiple schedule sections with different PMT calculations for each segment. It's doable but gets messy fast.
