Hiatus — leave tracker

Pro workbook: Log, Balances, Calendar, Setup, Formulas. Sample data, real formulas.

Leave log
One row per request. Working days are counted for you: weekends out, holidays from Setup out, only Approved counts toward balances.
Year2026
PersonTypeFromToDaysStatusNote
MaraAnnual2026-02-162026-02-205ApprovedSki week
TeoSick2026-03-042026-03-052Approved
PriyaAnnual2026-04-022026-04-073ApprovedEaster — Good Friday in range
JonasAnnual2026-05-222026-05-295ApprovedBank holiday Monday in range
MaraAnnual2026-07-132026-07-2410ApprovedSummer
NoraParental2026-08-032026-08-2820Approved
SamAnnual2026-08-312026-09-044ApprovedStarts on a bank holiday
TeoAnnual2026-09-142026-09-185Approved
PriyaSick2026-09-092026-09-091Approved
JonasUnpaid2026-09-212026-09-255PendingAwaiting sign-off
MaraAnnual2026-09-282026-10-025Approved
NoraAnnual2026-10-192026-10-235DeclinedTeam offsite that week
SamAnnual2026-12-212026-12-317ApprovedChristmas, two holidays in range
Balances
Approved working days per person and type, against the annual allowance on Setup.
PersonAllowanceAnnualSickUnpaidParentalOtherLeftUsed
Mara2520580.0%
Teo25522020.0%
Priya28312510.7%
Jonas2251722.7%
Nora2520250.0%
Sam2011955.0%
0.0%
0.0%
0.0%
0.0%
0.0%
0.0%
Team1454432010130.3%
Pending requests1
Pending days5
Left = allowance − Annual. Sick, unpaid, parental and other are counted but don't draw from the allowance. Red when overdrawn, yellow at three days or fewer; sick days yellow at five or more.
Who's off
One month: people down the side, days across. A letter per approved day — A annual, S sick, U unpaid, P parental, O other. Weekends and holidays shaded.
Month — type the 1stDays in month
September 202630
Person123456789101112131415161718192021222324252627282930Days
MaraAAA3
TeoAAAAA5
PriyaS1
Jonas
Nora
SamAAAA4
Off per day1111111111111
Blue: approved leave (letter = type), red: sick. Weekends grey, holidays pink, days past the month's end darker. 'Off per day' turns yellow at two or more people away.
Setup
The year, the team with annual allowances, the leave types, the statuses and the public holidays.
Year2026
PersonAllowance (days)TypeLetterStatusHolidayName
Mara25AnnualAApproved2026-01-01New Year's Day
Teo25SickSPending2026-04-03Good Friday
Priya28UnpaidUDeclined2026-05-25Spring bank holiday
Jonas22ParentalP2026-08-31Summer bank holiday
Nora25OtherO2026-12-25Christmas Day
Sam202026-12-28Boxing Day (substitute)
Twelve people, five types, forty holidays. The letters are what the Calendar shows; keep them to one character.
Sample holidays are UK-style — replace with yours. Holidays on weekends don't double-count: the day formula already skips weekends, so list weekday holidays only.
How the formulas work
Every formula in this workbook, in plain words. Nothing is hidden and nothing needs a macro. Formulas are shown without the leading = sign.
WhereFormulaWhat it does
Log · Saturdays in rangeIF(D6-C6<MOD(6-WEEKDAY(C6,2),7),0,INT((D6-C6-MOD(6-WEEKDAY(C6,2),7))/7)+1)MOD(6−weekday,7) is the distance from the start date to the first Saturday; if the range is shorter than that there are none, otherwise one every seven days after it. The same with 7 counts Sundays.
Log · DaysIF(OR(C6="",D6="",D6<C6),0,D6-C6+1-Saturdays-Sundays-COUNTIFS(hol_dates,">="&C6,hol_dates,"<="&D6))Calendar days minus weekends minus holidays in the range. No NETWORKDAYS: it isn't in every app the same way, and this is visible arithmetic.
Balances · per typeSUMIFS(Log!$E$6:$E$205,Log!$A$6:$A$205,$A5,Log!$B$6:$B$205,"Annual",Log!$F$6:$F$205,"Approved",Log!$C$6:$C$205,">="&DATE(Setup!$B$3,1,1),Log!$C$6:$C$205,"<="&DATE(Setup!$B$3,12,31))Days for this person, this type, approved, starting in the year on Setup — so last year's rows can stay in the log.
Balances · LeftB5-C5Allowance minus approved annual leave. Other types are counted but don't draw down.
Calendar · a day cellIF(COUNTIFS(names,$A6,types,"Annual",status,"Approved",from,"<="&date,to,">="&date)>0,"A", … "S", … "")Is there an approved request of this type for this person whose range contains the day? Nested once per type, first match wins. The date is built from the month cell and the day number in row 5.
Calendar · Days (row)SUMPRODUCT(LEN(B6:AF6))Every letter is one character and every empty result is zero characters, so the sum of lengths is the count of days. COUNTA would count the formulas themselves; a "<>" test on formula blanks behaves differently across apps.
Calendar · Off per daySUMPRODUCT(LEN(B6:B17))The same down a column: how many people are away that day.
Calendar · shadingConditional format: =WEEKDAY(DATE(YEAR($A$4),MONTH($A$4),B$5),2)>5 · =COUNTIF(hol_dates,DATE(…))>0Weekend and holiday rules rebuild the date from month + day number; leave letters are coloured by rules that test the cell's own value.