Build an Employee Training Tracker in Excel
By ExcelReady TeamUpdated 6 min read
The short answer
A training tracker in Excel is a log with one row per employee and course. Add the completion date and how many months the training is valid, work out the expiry with =EDATE(D2,E2), and flag the status with TODAY: Expired, Due soon or OK. Conditional formatting colours the rows, and COUNTIFS counts expired training by course or team.
Key takeaways
- Keep one row per employee per course: name, team, course, completed date, months valid.
- =EDATE(D2,E2) adds the valid months to the completion date and handles month ends correctly.
- A nested IF with TODAY() flags each row as Not done, Expired, Due soon or OK, and updates every day.
- Formula-based conditional formatting turns the status column into a colour-coded view.
- COUNTIF and COUNTIFS turn the log into a summary by status, course or team.
On this page+
A training tracker in Excel shows who has completed which course, when each certificate expires, and who is overdue. You need one log, three formulas (EDATE, IF with TODAY, and COUNTIFS) and a couple of colour rules. This guide builds the whole tracker step by step on six rows of sample data, so HR staff, team leads and safety coordinators can copy the layout and use it right away.
What a training tracker needs#
A good tracker is a simple list, with one row for each employee and course. Resist the urge to build a big grid with employees down the side and courses across the top. A list is easier to sort, filter, count and extend. You can always turn it into a grid later with a pivot table.
Here are the columns, with the sample data used throughout. Statuses are shown as of 2 November 2026:
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Employee | Team | Course | Completed | Valid (months) | Expires | Status |
| 2 | Ana | Warehouse | Fire safety | 15 Sep 2025 | 12 | 15 Sep 2026 | Expired |
| 3 | Ben | Office | First aid | 10 Mar 2024 | 36 | 10 Mar 2027 | OK |
| 4 | Chen | Warehouse | Fire safety | 20 Nov 2025 | 12 | 20 Nov 2026 | Due soon |
| 5 | Dina | Warehouse | Forklift | 1 Oct 2023 | 36 | 1 Oct 2026 | Expired |
| 6 | Eli | Office | Data privacy | 12 Jan 2026 | 12 | 12 Jan 2027 | OK |
| 7 | Femi | Office | Fire safety | 5 Dec 2024 | 24 | 5 Dec 2026 | OK |
You type columns A to E. Columns F and G are formulas.
Step 1: Set up the log as a table#
Type the headers in row 1 and your data below. Then click any cell in it and press Ctrl+T (Mac: ⌘T) to turn it into an Excel table. A table copies formulas down automatically when you add a row, so new training records get an expiry date and status without extra work.
Two small habits prevent most errors later:
- Type real dates in the Completed column, such as 15/09/2025 or 2025-09-15, not text like "Sept 15th".
- Use a drop-down list for Course and Team (Data > Data Validation > List), so "Fire Safety" and "fire safety training" don't end up as two different courses.
Step 2: Calculate the expiry date with EDATE#
EDATE adds a number of whole months to a date. That is exactly what "valid for 12 months" means. In F2:
=EDATE(D2,E2)For Ana, 15 Sep 2025 plus 12 months gives 15 Sep 2026. Format the column as a date (Ctrl+1, or ⌘1 on a Mac) if you see a number like 46280. EDATE also handles month ends sensibly: 31 January plus 1 month gives 28 February (or 29 in a leap year).
Don't use =D2+365 for a one-year course. It drifts by a day in leap years, and it can't handle 18-month or 3-year renewals as cleanly. The EDATE function guide covers the arguments, and EDATE vs EOMONTH explains when you'd want the month end instead.
Step 3: Flag the status with TODAY#
TODAY returns the current date and updates every time the file recalculates. Compare the expiry date with it to label each row. In G2:
=IF(D2="","Not done",IF(F2<TODAY(),"Expired",IF(F2-TODAY()<=30,"Due soon","OK")))Excel checks the tests in order:
- No completion date? The training hasn't been done yet: "Not done".
- Expiry date before today? "Expired".
- Expires within 30 days? "Due soon", so there's time to book a session.
- Anything else is "OK".
On 2 November 2026, Chen's fire safety (20 Nov 2026) is 18 days away and shows "Due soon". Femi's (5 Dec 2026) is 33 days away, so it's still "OK". The first test matters: without it, an empty completion date would give an odd expiry date and a misleading status. The TODAY function guide explains how it recalculates, and the expiry date tracker guide shows a days-left column and other variations.
Step 4: Colour the rows with conditional formatting#
Colour makes the overdue rows jump out. Select A2:G7 (or the whole table) and go to Home > Conditional Formatting > New Rule > Use a formula to determine which cells to format. Add one rule per status:
| Status | Rule formula | Fill |
|---|---|---|
| Expired | =$G2="Expired" | Light red |
| Due soon | =$G2="Due soon" | Light amber |
| Not done | =$G2="Not done" | Light grey |
The $ before G locks the column, so every cell in a row looks at that row's status. The row number has no $, so it changes from row to row. The guide on highlighting overdue dates explains this pattern in more detail.
Step 5: Summarise with COUNTIF and COUNTIFS#
A manager usually wants numbers, not rows. Build a small summary next to the log:
| Question | Formula | Result (2 Nov 2026) |
|---|---|---|
| How many records have expired? | =COUNTIF(G2:G7,"Expired") | 2 |
| How many are due within 30 days? | =COUNTIF(G2:G7,"Due soon") | 1 |
| Expired in the Warehouse team | =COUNTIFS(B2:B7,"Warehouse",G2:G7,"Expired") | 2 |
| Fire safety records that are current | =COUNTIFS(C2:C7,"Fire safety",G2:G7,"<>Expired") | 2 |
To show a completion rate, divide the current records by all records for that course: =COUNTIFS(C2:C7,"Fire safety",G2:G7,"<>Expired")/COUNTIF(C2:C7,"Fire safety") gives 2 ÷ 3 = 67%. Note that "<>Expired" also counts "Not done" rows, so add another condition, G2:G7,"<>Not done", if you have any. The COUNTIFS function guide lists every criteria form.
You can also count straight from the dates without the status column: =COUNTIF(F2:F7,"<"&TODAY()) counts expiry dates before today. The exercise on this page does exactly that, with a fixed report date so the answer doesn't change.
Tips to keep the tracker reliable#
- One fixed date for reports. TODAY changes daily, so a report you send on Monday shows different numbers on Tuesday. For a monthly snapshot, put the report date in a cell and use it instead of TODAY.
- Don't type over formulas. If someone types a date into the Expires column, it stops updating. Lock the formula columns or colour their headers differently.
- Keep history. When someone renews, add a new row rather than overwriting the old date, then filter to the latest record if needed.
- Related trackers use the same pattern; see the leave tracker and the Excel skills for HR jobs.
Practise it#
The tracker rests on three skills you can practise separately. Practise EDATE, EOMONTH and WEEKDAY in a live spreadsheet to work out renewal dates, then count by status and team in the COUNTIFS and SUMIFS lesson. Finish with the conditional formatting lesson to colour rows by rule. Each answer is checked instantly, so start with the exercise on this page.
Try it yourself
This is a live spreadsheet. Type the formula in the green cell and press Enter.
G1 holds the report date (in a live tracker you'd use TODAY()). In G2, count how many expiry dates in E2:E7 are before G1, using COUNTIF with "<"&G1.
| A | B | C | D | E | F | G | H | |
|---|---|---|---|---|---|---|---|---|
| 1 | ||||||||
| 2 | Expired | |||||||
| 3 | ||||||||
| 4 | ||||||||
| 5 | ||||||||
| 6 | ||||||||
| 7 | ||||||||
| 8 | ||||||||
| 9 | ||||||||
| 10 |
Tip: The criteria joins the operator in quotes to the date cell: "<"&G1.
Practise this in a lesson
Frequently asked questions
How do I create a training tracker in Excel?
List one row per employee and course with the completion date and months valid. Calculate the expiry date with EDATE, add a status column with IF and TODAY, colour it with conditional formatting, and count results with COUNTIFS.
How do I calculate when training expires in Excel?
Use EDATE to add the valid months to the completion date: =EDATE(D2,E2). If D2 is 15 Sep 2025 and E2 is 12, the result is 15 Sep 2026. Format the cell as a date.
How do I flag overdue training in Excel?
Compare the expiry date with today: =IF(F2<TODAY(),"Expired",IF(F2-TODAY()<=30,"Due soon","OK")). Then add a conditional formatting rule that fills Expired rows red.
How do I count how many employees have completed a course?
Use COUNTIFS with the course and the status, for example =COUNTIFS(C2:C50,"Fire safety",G2:G50,"OK"). Add a second COUNTIFS for Due soon if those still count as current.