Make a Weekly Shift Schedule in Excel
By ExcelReady TeamUpdated 6 min read
The short answer
A weekly shift schedule in Excel is a grid with one row per person and one column per day, filled with short shift codes such as E (early), L (late) and OFF. Type the week's start date once and build the other dates with +1. COUNTIF totals each person's shifts, and COUNTIFS checks that every day has enough people and a supervisor.
Key takeaways
- Type only the first date; every other date is the cell to its left plus 1.
- Use short, consistent shift codes and a drop-down list so COUNTIF can count them.
- COUNTIF counts shifts per person; COUNTIFS checks cover by role and shift for each day.
- A simple IF turns the cover counts into an OK or Check flag.
- Change one cell to roll the whole schedule to next week.
On this page+
A weekly shift schedule in Excel is a grid of people and days filled with short shift codes, plus a few formulas that count hours and check cover. You type the week's start date once, the other dates fill themselves, and COUNTIF and COUNTIFS flag any day that is short of staff or missing a supervisor. This project suits anyone who plans a team's week, and it is good practice for HR and operations roles.
What the finished schedule looks like#
The schedule is a grid: one row per person, one column per day, and one short code in each cell. Codes keep the grid readable and make counting easy.
This example uses three codes: E (early, 8 hours), L (late, 8 hours) and OFF. The week starts on Monday 2 November 2026.
| A | B | C | D | E | F | G | H | I | |
|---|---|---|---|---|---|---|---|---|---|
| 3 | Name | Role | 02/11 | 03/11 | 04/11 | 05/11 | 06/11 | 07/11 | 08/11 |
| 4 | Mon | Tue | Wed | Thu | Fri | Sat | Sun | ||
| 5 | Ana | Supervisor | E | E | E | E | E | OFF | OFF |
| 6 | Ben | Staff | L | L | OFF | L | L | E | E |
| 7 | Chen | Staff | E | E | L | OFF | OFF | L | L |
| 8 | Dina | Supervisor | OFF | L | L | L | L | E | OFF |
| 9 | Eli | Staff | L | OFF | E | E | E | L | E |
Rows 3 and 4 are formulas, not typing. The next step shows how.
Step 1: Make the dates fill themselves#
Type the first date once and build every other date from it. In A1 type Week starting, and in B1 type the Monday's date. Then:
| Cell | Formula | What it does |
|---|---|---|
| C3 | =$B$1 | Copies the start date |
| D3 | =C3+1 | The next day; fill right to I3 |
| C4 | =TEXT(C3,"ddd") | Short day name, Mon; fill right to I4 |
Excel stores dates as numbers, one per day, so +1 is the next day. Our guide to why Excel dates are numbers explains this. Use "dddd" in TEXT for full names such as Monday.
Start on the right Monday every time#
If someone types a Wednesday by mistake, this returns the Monday of that week:
=B1-WEEKDAY(B1,2)+1WEEKDAY(date,2) numbers Monday as 1 and Sunday as 7. For Wednesday 4 November it returns 3, so the formula subtracts 3 and adds 1, landing on 2 November. To roll to next week, change B1 or use =B1+7. For a monthly rota, =EDATE(B1,1) moves a date one month forward and =EOMONTH(B1,0) gives the month's last day; see EDATE and EOMONTH.
Step 2: Fill in shifts with a drop-down list#
A drop-down list keeps every code spelled the same way, which COUNTIF depends on. "E", "e " and "Early" would each count differently.
- Select the grid, C5:I9.
- Go to Data > Data Validation (Windows: Alt, A, V, V; on a Mac, Data > Data Validation).
- Under Allow, choose List, and in Source type
E,L,OFF. - Click OK. Each cell now has a small arrow.
See create a drop-down list in Excel for more options. To colour the codes, select the grid and use Home > Conditional Formatting > Highlight Cells Rules > Equal To, once for each code.
Step 3: Count shifts and hours per person#
COUNTIF counts the cells in a row that match a code. Add two columns at the end of each row:
| Cell | Header | Formula (row 5, fill down) | Ana's result |
|---|---|---|---|
| J5 | Shifts | =COUNTIF(C5:I5,"<>OFF") | 5 |
| K5 | Hours | =J5*8 | 40 |
"<>OFF" means "not equal to OFF". Filled down, the results are Ana 5, Ben 6, Chen 5, Dina 5 and Eli 6 shifts, or 40, 48, 40, 40 and 48 hours. Ben and Eli are over a 5-shift week, which is exactly what this column is for.
One catch: "<>OFF" also counts blank cells. If some cells may be empty, add a second condition with COUNTIFS so blanks are skipped:
=COUNTIFS(C5:I5,"<>OFF",C5:I5,"<>")If shifts have different lengths, count each code and multiply: =COUNTIF(C5:I5,"E")*8+COUNTIF(C5:I5,"L")*8. For start and finish times, see calculate hours worked and overtime.
Step 4: Check cover for each day with COUNTIFS#
Cover checks count down each day's column. Put them under the grid and fill right from C to I:
| Row | Check | Formula in column C |
|---|---|---|
| 11 | Early shifts | =COUNTIF(C5:C9,"E") |
| 12 | Late shifts | =COUNTIF(C5:C9,"L") |
| 13 | Supervisors on | =COUNTIFS($B$5:$B$9,"Supervisor",C5:C9,"<>OFF") |
| 14 | Flag | =IF(OR(C11<2,C12<2,C13<1),"Check","OK") |
Row 13 uses COUNTIFS because it has two conditions: the role is Supervisor and the person isn't off. The role range is locked with $ so it stays on column B as you fill right, while the day column moves.
In this example, every day shows OK except Sunday, which shows Check: only one late shift (Chen) and no supervisor, because Ana and Dina are both off. Swap one shift and the flag updates. The COUNTIFS function guide and COUNTIFS and SUMIFS explained cover more criteria, such as counting a range of values.
Step 5: Spot weekends and holidays#
Weekend shifts often need a different pay rate or extra cover. This formula returns TRUE for Saturday and Sunday:
=WEEKDAY(C3,2)>5Use it as a conditional formatting rule to shade weekend columns: select C3:I9, choose Home > Conditional Formatting > New Rule > Use a formula to determine which cells to format, and enter =WEEKDAY(C$3,2)>5. The $ before 3 keeps every row pointing at the date row. Our WEEKDAY function guide has more examples.
How to extend the schedule#
Once the week works, these additions make it a full rota:
- Four weeks on one sheet: copy the block below itself and set its start date to the cell above plus 7.
- A night shift: add N to the drop-down source, a row 15 count, and N's hours in column K.
- Leave and training codes: add codes such as AL (annual leave). Decide whether
"<>OFF"should count them, or count only E, L and N. - Weekly totals: a SUMIFS on a separate summary sheet can add hours by person across weeks. The KPI summary sheet project shows that pattern.
- Print it: set the page to landscape and fit to one page wide.
Scheduling and headcount reports are everyday work in people teams; Excel skills for HR and recruiting jobs lists others. The same "inputs, formulas, checks" layout also works for a monthly budget and a price list with discounts and tax.
Practise it#
Try the supervisor check in the exercise on this page. Then take the COUNTIFS and SUMIFS lesson to practise multi-condition counts, and the EDATE, EOMONTH and WEEKDAY lesson to get comfortable with the date formulas that drive the schedule.
Try it yourself
This is a live spreadsheet. Type the formula in the green cell and press Enter.
Every early shift needs a supervisor. In G2, use COUNTIFS to count the people whose Role (B2:B6) is Supervisor and whose Monday shift (C2:C6) is E.
| A | B | C | D | E | F | G | H | |
|---|---|---|---|---|---|---|---|---|
| 1 | Wed | Supervisors on Mon early | ||||||
| 2 | E | |||||||
| 3 | OFF | |||||||
| 4 | L | |||||||
| 5 | L | |||||||
| 6 | E | |||||||
| 7 | ||||||||
| 8 | ||||||||
| 9 |
Tip: Two pairs: the Role column with "Supervisor", then the Monday column with "E". Only Ana matches, so the answer is 1.
Practise this in a lesson
Frequently asked questions
How do I make a shift schedule in Excel?
Put names in column A and the seven dates across the top, starting from one typed date and adding 1 for each next day. Fill the grid with shift codes, then add COUNTIF formulas for shifts per person and cover per day.
How do I count how many people work each shift?
Use COUNTIF on the day's column: =COUNTIF(C5:C9,"E") counts early shifts on Monday. Add a role condition with COUNTIFS, such as =COUNTIFS($B$5:$B$9,"Supervisor",C5:C9,"<>OFF").
How do I show the day name above each date?
Use =TEXT(C3,"ddd") for a short name like Mon, or "dddd" for Monday. You can also give the date cells a custom number format of ddd.
How do I find the Monday of any week?
=B1-WEEKDAY(B1,2)+1 returns the Monday of the week that contains the date in B1. WEEKDAY with 2 numbers Monday as 1 and Sunday as 7.
Can I calculate hours if shifts have different lengths?
Yes. Count each code separately and multiply by its length, for example =COUNTIF(C5:I5,"E")*8+COUNTIF(C5:I5,"N")*10. For start and finish times, see our guide to hours worked and overtime.