Returns the principal payment for a given period of an investment based on periodic, constant payments and a constant interest rate. Essential for loan amortization, principal tracking, and understanding how much of each payment reduces the loan balance. Calculates the principal portion of a single payment.
Master the fundamentals of Excel PPMT function
The PPMT (Principal Payment) function calculates the principal portion of a payment for a specified period in an amortizing loan or investment. This function is essential for loan amortization schedules, tracking loan payoff progress, and understanding how much each payment reduces the outstanding balance. PPMT demonstrates the amortization pattern where principal payments increase over the loan life as the interest portion decreases. Early payments consist mostly of interest (low principal, high interest), while later payments consist mostly of principal (high principal, low interest). PPMT works with IPMT (interest payment) and together they equal PMT (total payment), showing the complete payment composition.
PPMT calculates principal for one specific period (per parameter). Returns principal portion of that payment only, not cumulative or total principal.
Principal payments increase over loan life as interest portion decreases. Formula: Principal = Total Payment - Interest. More principal paid over time.
Returns negative values representing cash outflow (principal repayment). Follows Excel standard: negative = money paid out.
Works with IPMT to split total payment: PMT = PPMT + IPMT. PPMT (principal) + IPMT (interest) = total payment amount.
Principal directly reduces outstanding loan balance. Each payment reduces balance by PPMT amount. Track payoff progress.
Essential for tracking loan payoff progress, calculating remaining balance, and analyzing amortization patterns.
Function-specific parameters
Function-specific return type
Create amortization schedules showing principal per period
Track principal paid for specific payments
Monitor how much of loan has been paid off
Analyze principal payment patterns over loan life
Compare principal payments between loans
Plan principal payments for budgeting
Exact matching required
Returns numeric position
Handles missing text gracefully
=PPMT(rate, per, nper, pv, fv, type)The interest rate per period. Must be in decimal form (e.g., 5% = 0.05). Must match the payment period (monthly rate for monthly payments, annual rate for annual payments).
The payment period for which principal is calculated. Must be between 1 and nper. Period numbering starts at 1.
The total number of payment periods. Must be positive. Must match the rate period (e.g., 360 months for 30 years of monthly payments).
The present value, or total amount of the loan. Enter as positive value. For loans, this is the principal amount borrowed.
The future value, or cash balance after the last payment. Default is 0 (loan fully paid). For balloon loans, enter remaining balance.
When payments are due: 0 = end of period (default), 1 = beginning of period. Affects calculation slightly.
The principal payment for the specified period (negative value represents cash outflow)
Description: Calculates principal portion of a payment for specific period
Calculate principal for first payment of mortgage
Returns principal of $240.31 for first month. Principal is lowest in early periods when interest is highest.
Using PPMT function in VBA through WorksheetFunction
Sub PPMTExample()
Dim result As Double
Dim rate As Double, per As Integer, nper As Integer, pv As Double
rate = 0.05 / 12
per = 1
nper = 360
pv = 200000
result = Application.WorksheetFunction.PPmt(rate, per, nper, pv)
Range("A1").Value = result
Range("A1").NumberFormat = "$#,##0.00"
MsgBox "First period principal: quot; & Format(Abs(result), "#,##0.00")
End Sub
' Calculate principal for multiple periods
Sub CalculatePrincipalSchedule()
Dim rate As Double, nper As Integer, pv As Double
Dim i As Integer
Dim principal As Double
rate = 0.05 / 12
nper = 360
pv = 200000
For i = 1 To 12
principal = Application.WorksheetFunction.PPmt(rate, i, nper, pv)
Range("A" & i).Value = "Period " & i
Range("B" & i).Value = Abs(principal)
Range("B" & i).NumberFormat = "$#,##0.00"
Next i
End Sub
' Build complete amortization table
Sub BuildAmortizationTable()
Dim rate As Double, nper As Integer, pv As Double
Dim i As Integer
Dim payment As Double, interest As Double, principal As Double
Dim balance As Double
rate = 0.05 / 12
nper = 360
pv = 200000
balance = pv
payment = Application.WorksheetFunction.Pmt(rate, nper, pv)
For i = 1 To 12
interest = Application.WorksheetFunction.IPmt(rate, i, nper, pv, 0, 0)
principal = Application.WorksheetFunction.PPmt(rate, i, nper, pv, 0, 0)
balance = balance + principal
Range("A" & i + 1).Value = i
Range("B" & i + 1).Value = Abs(payment)
Range("C" & i + 1).Value = Abs(interest)
Range("D" & i + 1).Value = Abs(principal)
Range("E" & i + 1).Value = balance
Range("B" & i + 1).NumberFormat = "$#,##0.00"
Range("C" & i + 1).NumberFormat = "$#,##0.00"
Range("D" & i + 1).NumberFormat = "$#,##0.00"
Range("E" & i + 1).NumberFormat = "$#,##0.00"
Next i
End Sub
' Calculate total principal paid to date
Sub CalculatePrincipalPaid()
Dim totalPrincipal As Double
Dim i As Integer
Dim rate As Double, nper As Integer, pv As Double
Dim currentPeriod As Integer
rate = 0.05 / 12
nper = 360
pv = 200000
currentPeriod = 120
For i = 1 To currentPeriod
totalPrincipal = totalPrincipal + Abs(Application.WorksheetFunction.PPmt(rate, i, nper, pv))
Next i
Range("B1").Value = totalPrincipal
Range("B1").NumberFormat = "$#,##0.00"
MsgBox "Total principal paid: quot; & Format(totalPrincipal, "#,##0.00")
End SubCalculate principal for each payment in schedule
Track principal paid for specific periods
Monitor loan payoff progress
Build principal column for all payments
Analyze principal vs interest allocation
Compare principal payments between loans
PPMT returns #NUM! error
=PPMT(0.05/12, 1, 360, 200000)Solution: Check: 1) per >= 1 and per <= nper, 2) All numeric parameters are valid, 3) Rate and nper match payment periods. Verify period numbering starts at 1, not 0.
PPMT returns negative value unexpectedly
=ABS(PPMT(rate, per, nper, pv))Solution: Negative values are correct - they represent cash outflow (principal repayment). Use ABS() to display as positive: =ABS(PPMT(...)) for readability in reports.
Principal amount seems incorrect
=PPMT(0.05/12, 1, 360, 200000)Solution: Check: 1) Rate is in decimal form (5% = 0.05, not 5), 2) Rate matches period (monthly rate for monthly payments), 3) Per is correct period number. Early periods have lower principal than later periods.
Principal appears constant across periods
=PPMT(rate, period, nper, pv)Solution: Ensure all parameters remain constant except per. Principal should increase as per increases. If using cell references for per, verify they're incrementing correctly.
PPMT returns #VALUE! error
=PPMT(A1, B1, C1, D1, E1, F1)Solution: Non-numeric values in parameters. Check: 1) All parameters are numbers, 2) Cell references contain numeric values, 3) No text in any parameter. Verify inputs are valid numbers.
Uncertain how PPMT relates to IPMT and PMT
=ABS(PPMT(...) + IPMT(...)) should equal =ABS(PMT(...))Solution: PPMT (principal) + IPMT (interest) = PMT (total payment). All three should use same rate, nper, pv. Verify this relationship holds in your calculations.
Calculates interest payment for a single period
FinancialCalculates total payment amount per period
FinancialCalculates cumulative principal over period range
FinancialCalculates cumulative interest over period range
FinancialCalculates present value of loan
FinancialCalculates future value/remaining balance
Financial