Monthly Shift Planner

Planning
 
Team Size
0
active employees
Your roster stays in this browser — no account, no upload, nothing stored server-side. Link an Excel file under Config to keep a copy on your own disk.

Employees

Everyone who should appear on the roster. Rotational people cycle through Morning, Evening and Night; GeneralOnly people stay on General every working day. Level is a free-text note (L1, L2, Lead) — it is not used by the generator.

NameShift GroupLevelRemove

Preferences — firm requests, placed first

People who have asked for a particular shift, week-off day or comp-off date. Anyone listed here is placed on the roster before everyone else, and among them the earliest request wins — so the Submitted time is what settles a clash. Everybody not listed is filled in around them. Leave this empty if nobody has asked for anything.

Comp-off is a single earned day off, so it is a date rather than a weekday. Put it here when the person asked for it — the request keeps its place in the priority order. Use Overrides instead for a comp-off you are imposing, or for more than one day in a row. Someone owed two separate comp-offs gets a second row.

NameWeek 1Week 2Week 3Week 4Week 5 Week-Off 1Week-Off 2Comp-OffSubmittedRemove

Overrides — leave and fixed days

Vacation, comp-off, unpaid leave, training — anything that pins a person's day no matter what the generator would otherwise do. Overrides beat preferences. For a single day just fill in Start Date. Editing a cell directly on the Roster grid writes an override here too.

NameStart DateEnd DateCodeRemove

Config

People per shift

The minimum is a floor the generator will pull people in to reach. The maximum is a ceiling — a full shift turns requests away and stops taking the rotation, so people spill onto the next shift with room. Leave a maximum at 0 for no ceiling.

Minimum
Maximum
Morning
Evening
Night

Caps back-to-back nights. 0 = no cap. Gives way only if a shift would otherwise be left short.

Backup / Restore

Load from Excel reads a workbook back in — either a linked backup file or the macro workbook — and picks up where it left off.
Clearing wipes what you have entered in this browser and puts the sample team back. A linked Excel file is left exactly as it is — it gets unlinked first, so nothing can overwrite it.

Live Excel Backup

Not linked.

Next Month Roster

What next month looks like if nothing changes — the same team, preferences and settings, run forward a month. Leave and comp-off dated next month are already applied, so book them on Overrides and they show up here. Click any day to set it, exactly as on the Roster.

Requests come first, then the default rotation, then whoever is needed to keep a shift above its minimum. How the generator works →

Daily Shift Headcount

Roster

Priority Log

Who the generator placed first, and why. Times Moved shows where someone was pulled off their own block shift to keep another shift above its minimum — each move is listed with the day and the change.

How the generator works

Every day of the month is filled in the same order. Later steps never undo an earlier one, so the list below is also the order of precedence.

  1. Leave and fixed days win first. Anything on the Overrides tab pins that person's day. A single-day entry beats a longer range covering the same date, so a one-off tweak always survives.
  2. Week-off days are placed. Someone who asked for a day gets it, plus the following day(s) until they have their configured number off. Everyone else gets a consecutive pair, staggered across the team so the whole roster is not off at once.
  3. Stated requests are honoured, earliest first. Anyone on the Preferences tab is placed before anyone who asked for nothing. Between two requests, the earlier Submitted time wins.
  4. Everyone else rotates. People without a request stay on the same shift for up to five working days, then move Morning → Night → Evening. Start points are staggered so the team does not all rotate on the same day.
  5. Shortfalls are covered last. If a shift is still below its minimum, someone is pulled across from a shift that has people to spare. The person moved fewest times so far is chosen, which is what keeps the burden from landing on the same person repeatedly. Requests and leave are never taken to do this — only the default rotation is.

One rule overrides everything: nobody works a Morning the day after a Night. A request that would break it is moved to Evening, and the roster tells you each time that happened.

If Max nights in a row is set in Config, anyone reaching it is rotated off nights early rather than waiting for their block to end. It gives way only when a shift would otherwise be left short — leaving a night uncovered is worse than one extra night for one person.

If a shift still cannot reach its minimum after all that, the day is reported as a shortfall rather than quietly under-staffed.