Access 2007-2016
Access 2000-2003
Access Seminars
TechHelp Support
Tips & Tricks
Access Forum
Course Index
Topic Glossary
Insider Circle
Home   News   Tips   Glossary   Templates   Forums   Help   Logon   Order   Contact Us  

Loan Amortization Seminar

Learn how to calculate a loan payment schedule in Microsoft Access

This seminar will teach you how to calculate a complete Loan Amortization Schedule in Microsoft Access.

1. Learn how to calculate loan payments
2. Create a complete amortization schedule
3. Work with flexible loan terms
4. Manage multiple loans per client and per loan provider
Generate reports such as an aged accounts receivable

Watch this video to learn more about this seminar:

After you watch the preview videos above,
click here to download the database we build in this
seminar so you can see everything that is included.


Access Loan Amortization Seminar
Description: Learn how to perform loan calculations in Access
Versions: I will use Access 2010, however the lessons are valid for all versions of Access back to 2000 with some minor cosmetic differences.
Pre-Requisites: This is an advanced course. It moves along at a very quick pace. You should have a solid understanding of all of the material in my Access Beginner (100-level), Expert (200s), and Advanced (300s) courses.
Running Time: 5 Hours 45 Minutes
Cost: $139 - Order multiple courses to receive a discount up to 50% off


What's Covered

The Loan Form is the main feature of this database. Here you can select a client, a loan provider, enter the terms of the loan, calculate the payments, generate a complete amortization schedule, and track client payments. We'll spend most of our time building this complex form.


Exploring the other features of this database, we'll learn how to create a Main Menu form:


We will create a Client List and a Client Detail form. You'll see a list of Loans per Client.


You can print a report showing the status of all loans per client.


You can see all of the same items for Loan Providers as well (list form, details, report):


To create a new loan, just select a client and a provider. Enter a description, the loan amound, the interest rate, and the start date. Select a frequency (monthly, weekly, etc.)


Enter in the number of payments (or type in the number of Years and the database will calculate the number of payments for you). The click on the Calculate Monthly Payment button and Access will tell you what the payment should be.


Now you're ready to generate the complete Amortization Schedule. Again, one click and Access does all the heavy lifting for you.


You can enter the client's payments as they come in. Access will assign them to "regular" payment amount and "extra" payment amount, if you wish to allow the client to pay down his balance early.


You can print this complete report out for the client.


There are a couple of additional reports as well. You can generate a list of all active loans for all providers, a list of all current loan values (payoff amounts), and you can generate an aged accounts receivable, showing as much or as little detail as you want.


For example, this report shows the providers, clients, and loan info, but not all of the payment schedule details:


This is the perfect seminar for anyone who needs to learn how to calculate loan payments and track amortization schedules with payment histories in Microsoft Access. Of course, if you have any questions about whether or not this seminar is for you, please feel free to  contact me. I'd be happy to answer any questions you might have.

NOTE: If you're looking for something less involved, there is a simpler database available that performs basic loan amortizations in the Templates section.


Access Loan Amortization Seminar Outline

0. Introduction (10:17)

1. Lesson 01 (22:49)
Initial setup
Making the Tables
Loan Form

2. Lesson 02 (21:04)
NumberOfPayments Calculator
Tab Order
PMT Function
Creating the Schecule Form

3. Lesson 03 (22:05)
Delete any previous Schedules
Create a new Schedule

4. Lesson 04 (24:44)
Summary Totals
Adding a Subform
Check for changes
Add a Payment
Recalculate other figures

5. Lesson 05 (22:46)
Recalculating Payments
Adding the Payments SubForm
Master/Child Fields

6. Lesson 06 (22:14)
Adding a Payment
Loan Status Values

7. Lesson 07 (18:18)
ClientF, ProviderF
Main Menu
Listbox of Loans
Default Values

8. Lesson 08 (22:34)
Fixing a Requery Problem on new Loan
Echo to stop Screen updating
Delete a Record
Stop Warnings

9. Lesson 09 (24:27)
Repeat for the ProviderListF
DoubleClick Events to open Forms
Active Loans

10. Lesson 10 (21:11)
Format Painter
Size/Align to Grid
Force New Page
Master/Child Fields

11. Lesson 11 (29:05)
Report Headers
Payments SubReport
Relationships 101
Sorting and Grouping

12. Lesson 12 (27:26)
Accounts Receivable

13. Lesson 13 (31:12)
Accounts Receivable Reports
Hiding Report Sections

14. Lesson 14 (25:13)
Current Loan Value Report




Student Interaction: Access Loan Amortization Seminar

Richard on 3/31/2013:  This was only supposed to be a quick 30-minute tutorial, and it ballooned up into almost 6 hours, but it covers a lot of great material. If you want to learn how to manage loans in Access, this is the seminar for you. This seminar will teach you how to calculate a complete Loan Amortization Schedule in Microsoft Access. 1. Learn how to calculate loan payments 2. Create a complete amortization schedule 3. Work with flexible loan terms 4. Manage multiple loans per client and per loan provider 5. Generate reports such as an aged accounts receivable You can watch the introductory lesson which explains everything covered in the seminar PLUS download a free working database template here: Microsoft Access Loan Amortization Seminar
Richard Rost on 4/1/2013: A couple of last-minute "after the videos were finished" notes:

The schedule subform wasn't sorting properly sometimes, so I changed the recordsource from just ScheduleT to:

SELECT * FROM ScheduleT ORDER BY PaymentNumber

The same problem happens on the report too, but there all you have to do is set the "Order By" property to PaymentNumber.


In the Access 2000 database version that's included with the full package, the EMBEDDED MACROS don't work to open the ClientF and ProviderF from the Main Menu. I replaced those with Docmd.Openform commands. Easy enough.

Deon Riley on 4/14/2013: Hi Richard,

Wow - have I enjoyed this Seminar! Yes I would love to see an addendum about payment on-time, late by num days, weeks etc please!

Thank you for your very excellent courses and your teaching metodology and best regards,


Reply from Richard Rost:


OK, we have one vote for the addendums. Any more?

Eleanor M on 5/14/2013: I would love to see this as well addendums, especially the late payments.
Bruce Reynolds on 6/11/2013: I will find out eventually anyway, but do you use formulas to calculate payments for both an annuity (end of month), and an annuity due (beginning of month)?

Reply from Richard Rost:

I've seen it done both ways. It all depends on how the annuity is structured.

Bruce Reynolds on 6/11/2013: In this seminar, are you assuming that the loan customers are making payments at the end of the period versus the beginning of the period? This is an important question, as the payment will be different. For example, if a customer is going to borrow $100,000 at an annual rate of 5 percent over 30 years and is going to make monthly payments at the end of the month, then the formula and monthly payment is:

=PMT(5%/12,360,100000,0,0) or $536.82

However, if the customer is going to borrow the same amount of $100,000 at the same rate of 5 percent over 30 years, but make payments at the beginning of the month, then the formula and monthly payment is:

=PMT(5%/12,360,100000,0,1) or $534.59

In the Private Sub Command22_Click object, you have the following formula:

PaymentAmount = Pmt(InterestRate / FrequencyCombo.Column(2), _
NumberOfPayments, LoanAmount) * -1

I believe you have omitted two variables in the payment formula you are using. These two variables would show up after the LoanAmount variable. I believe you need to add a variable for the future value, which in this case would be equal to 0, and a 0/1 toggle variable where 0 would be used for a payment formula where the customer makes payments at the END of the month and 1 would be used for a payment formula where the customer makes payments at the BEGINNING of the month. If you have not programmed this logic, then please include in your response what an interested person would have to do to accomodate customers who would like to make loan payments at the beginning of the month.

Thank you,

Reply from Richard Rost:

Bruce, for loans, the FV (Future Value) is generally 0. The only way you'd want to specify a FV is if you want to make payments for a few years and then have a balloon payment of, say, $5000 at the end of the loan period. I did not cover this example in the seminar.

Yes, for all of my calculations, I assume the loan payment is being made at the END of the period. Like you pointed out, if you want the payment due at the BEGINNING of the period, the change the final variable [Type] to 1 instead of 0 (the default).

When creating this seminar, I used the final database to check loan amortization statements prepared by my bank for my mortgage PLUS three of my past car loans, and they all checked out. I believe the technique I used in the seminar is considered proper accounting practice - although the variations you mentioned are certainly possible.

leroy a diaz on 6/13/2013: Hi Richard i have purchased this and i am trying to do this on Access 2000 so far everything worked up until the "Recalac function" it loops but then keeps going creating an endless loop how do i get around this for the amountpaid afterupdate event...

Reply from Richard Rost:

You must have coded something wrong. I just saved my Access 2010 version as a 2000 database and opened it up in Access 2000 and the code worked just fine for me. The main menu buttons don't work (because Access 2010 creates embedded macros which aren't supported in MDB files) but all of the VBA code I wrote in the seminar works just fine. I'll email you this database file. Just open up LoanF and give it a go.

Minden Dickson on 9/12/2013: How would you handle a variable rate loan? Could you have the projected rates in a table then have the Interest formula look up the right rate to use based on the CurDate? Could you post an example of what that formula would look like?

Reply from Richard Rost:

That is exactly how you would do it. See my lessons on DLOOKUP for ideas on how to set it up.

Saqib Riaz on 11/10/2013: 12mins:54seconds

Ok seems quite straight forward and works well when the amountpaid is above amountdue. However when the amountpaid is less than the amountdue the beginningbalance does not recalc to reflect this

Adrienne Burks on 3/3/2014: Hi Richard - So glad I came across your seminar. It's exactly what I need to learn. I definitely would like to see an addendum about lates payments. Hope you post it soon. Thanks for having this specialized Access seminar.
Nicholas O on 3/16/2014: If I charge interest on the field at lesson one you say put in a number if it's 20% what number do I put into table design on interest instead of 0
Nicholas O on 3/16/2014: Yes I also like to see something on late payments as some are late nick
Alan Lipps on 8/20/2014: Hello. I am having the same issue as Leroy Diaz. My trouble seems related to payment numbers being equal to zero (instead of null). When I enter a value that is more than the payment amount, the number of payments gets decreased but payment numbers get changed to zeros. This creates an endless loop. Why are my payment numbers changing to zeros?

Reply from Richard Rost:

Walk me through EXACTLY what you're doing and I'll see if I can figure it out. I need to be able to replicate it first so I can see what the problem is.

Alan Lipps on 8/20/2014: I figured out the reason I was creating an endless loop using the DoRecalc procedure. I had the default value for the payment number, in the ScheduleT, set to 0. I deleted the 0 default value and voila.

Reply from Richard Rost:

Glad I could help. LOL

Svuth on 5/9/2016: Hello,

If I have multi currency for many client. Can I generate multi currency?


Reply from Alex Hedley:

You could have a Field against the user that chooses currency then have code on your form to format accordingly

Alvaro Berrio-Caratt on 8/20/2016: Hi,

I am using Access 2013, none of the icons works, would you please advise.



Reply from Alex Hedley:

Are these icons in the Ribbon?
Is this an Office 365 copy? Is it licensed or is there a red warning bar along the top?

Karen Dolen on 9/12/2016: If you had different lenders that calculated their payments based different interest calculations 30/360, 30/365, Actual/365 or Actual/Actual would this amortization database be able to handle that or would that be covered in the course?

Reply from Alex Hedley:

There's a sample db you can download and try out.
It's been a while since I wrote the HB but I think you create a loan and settings per loan.

Chris Thompson on 2/4/2017: FYI, if the loans start in a previous year and you view them, the payments will not be in order. While there are several ways to correct this, I changed my ScheduleF and ScheduleR record sources to: SELECT * FROM ScheduleT ORDER BY DueDate;

Reply from Alex Hedley:

Ah a missed Order By Clause!

Maryann B on 10/12/2017: I have completed a database using this seminar and it was working perfectly until I put the tables on SharePoint. Now on the ClientF form when I click on the "Add New Loan" button I get an error "Invalid use of Null". Why is it giving me this error? when I click on debug it takes me to this vba code and points to the 7th line (X = Forms!LoanF!LoanID)

Private Sub Command5_Click()

Dim X As Long

DoCmd.Echo False, "Opening..."
DoCmd.OpenForm "LoanF", , , , acFormAdd
Forms!LoanF!LoanAmount = 1
'Forms!LoanF!Description = "NEW LOAN"
X = Forms!LoanF!LoanID
DoCmd.Close acForm, "LoanF", acSaveYes
DoCmd.OpenForm "LoanF", , , "LoanID=" & X
DoCmd.Echo True

End Sub

I am not sure if this is the right place to submit my question or if it should be done on TechHelp. I am in a big pinch at the moment with this problem and have been unable to find a solution. I really hope you can help me with this and if this isn't the correct place to post this please direct me to the correct place to get the fastest response. Thanks, Maryann

Reply from Alex Hedley:

Are you using a Sharepoint List as a Table?

Maryann Beach on 10/14/2017: yes

Reply from Alex Hedley:

Is the form "LoanF" open? (Forms!LoanF!LoanID)
Does LoanId have a value?

Maryann Beach on 10/14/2017: yes all my tables have been moved to SharePoint lists
JC on 8/23/2018: Is there a way to have the amortization schedule set up for compound interest as well as the calculated on the reducing balance?
koolwaters on 8/31/2018: I have recently purchased the loan amortization seminar and I have a query.

I need to be able to calculate loans based on the reducing balance as well as using the compounded interest method.

I need some assistance with incorporating the compounded interest method into my database and generate the loan amortization schedule as well.

Can you offer any guidance?

Reply from Alex Hedley:

I think Expert 30 covered Compound Interest.

June C on 9/1/2018: So I have to purchase another course to cover a topic that falls under loans?

You may want to read these articles from the 599CD News:


Visual Basicindex
Account Login
Online Theater
Lost Password
Free Upgrades
Insider Circle
Student Databases
Change Email
Latest News
New Releases
User Forums
Topic Glossary
Tips & Tricks
Search Our Site
Waiting List
Production Schedule
Collapse Menus
Live Chat
Customer Support
WalkThru Tutorials
Consulting Services
About Us
Affiliate Program
Richard Rost
Free Lessons
Mailing List
Video Tutorials
MYOLP Memberships
Idiot's Guide to Excel
Volume Discounts
Payment Info
Terms of Sale
Gift CDs
Live Chat
General Info
Support Policy
Contact Form
Email Us
Mailing Address
Phone Number
Fax Number
Course Survey
Facebook    Twitter

Google Plus    LinkedIn

Blog RSS Feed    YouTube Channel
Richard Rost Microsoft MVP