Slate — calendar with events

Pro workbook: Month, Year, Week, Events, Setup, Formulas. Sample data, real formulas.

Calendar
Change the year and month; the grid, the events and the highlights follow. Print it: it fits one landscape page.
Year2026First of month1 Sep
Month9Grid starts31 Aug
Week starts onMondayWEEKDAY type2
September 2026This month
MonTueWedThuFriSatSunDays30
31123456Weekend days8
School startsDentist 9:00Events12
78910111213Holidays1
Labor DaySprint planningRent dueHike with Sam
14151617181920
Quarterly review +1 moreTax filing deadline
21222324252627
Flight to LisbonBack home
2829301234
Car serviceInvoice clients
567891011
Yellow cells are yours. Weekends are shaded, today is blue, holidays from Setup are pink, days from the neighbouring months are greyed.
Events come from the Events sheet: the first event on a day is shown, more are counted.
To print: File → Print, landscape, fit to one page wide.
Year at a glance — 2026
Twelve months from the year on Setup. Weekends shaded, holidays pink, today blue.
WEEKDAY type2
JanuaryFebruaryMarch
MonTueWedThuFriSatSunMonTueWedThuFriSatSunMonTueWedThuFriSatSun
123411
56789101123456782345678
1213141516171891011121314159101112131415
192021222324251617181920212216171819202122
26272829303123242526272823242526272829
3031
AprilMayJune
MonTueWedThuFriSatSunMonTueWedThuFriSatSunMonTueWedThuFriSatSun
123451231234567
678910111245678910891011121314
131415161718191112131415161715161718192021
202122232425261819202122232422232425262728
27282930252627282930312930
JulyAugustSeptember
MonTueWedThuFriSatSunMonTueWedThuFriSatSunMonTueWedThuFriSatSun
1234512123456
6789101112345678978910111213
131415161718191011121314151614151617181920
202122232425261718192021222321222324252627
272829303124252627282930282930
31
OctoberNovemberDecember
MonTueWedThuFriSatSunMonTueWedThuFriSatSunMonTueWedThuFriSatSun
12341123456
567891011234567878910111213
12131415161718910111213141514151617181920
192021222324251617181920212221222324252627
2627282930312324252627282928293031
30
Week planner
Type any date; the week containing it is laid out with every event from the Events sheet.
Week of2026-09-09StartsMon 7 Sep
Mon 7 SepTue 8 SepWed 9 SepThu 10 SepFri 11 SepSat 12 SepSun 13 Sep
Labor Day
Sprint planningRent dueHike with Sam
Six event slots per day. A seventh event on the same day is still counted on Month ('+N more') but not listed here.
Holiday names in italics under the date.
Events
One row per event: date, what, category. Order doesn't matter. Two on the same day: the grid shows the first and counts the rest.
DateEventCategory# that daykey
2026-09-01School startsFamily1462661
2026-09-03Dentist 9:00Personal1462681
2026-09-08Sprint planningWork1462731
2026-09-10Rent dueDeadline1462751
2026-09-12Hike with SamPersonal1462771
2026-09-15Quarterly reviewWork1462801
2026-09-15Dinner at Nora'sFamily2462802
2026-09-18Tax filing deadlineDeadline1462831
2026-09-21Flight to LisbonTravel1462861
2026-09-25Back homeTravel1462901
2026-09-28Car servicePersonal1462931
2026-09-30Invoice clientsWork1462951
2026-10-02Team offsiteWork1462971
2026-10-09Mum's birthdayFamily1463041
Setup
Year, month and week start for Month and Year; holidays; event categories.
Year2026
Month (1–12)9
Week starts onMonday
Holiday dateNameCategories
2026-01-01New Year's DayWork
2026-04-03Good FridayPersonal
2026-05-25Spring bank holidayFamily
2026-09-07Labor DayTravel
2026-11-26ThanksgivingDeadline
2026-12-25Christmas Day
2026-12-26Boxing Day
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
Month · first of monthDATE($B$3,$B$4,1)Year and month from Setup become a real date.
Month · grid start$E$3-WEEKDAY($E$3,$E$5)+1Steps back from the 1st to the start of its week. WEEKDAY type 2 counts Monday as 1, type 1 counts Sunday as 1 — that's how 'week starts on' works.
Month · a day cell$E$4+8Grid start plus an offset (0–41). It's a real date shown with the number format 'd', so highlights and lookups can use it.
Month · day nameCHOOSE(WEEKDAY($E$4+0,2),"Mon","Tue",…)CHOOSE on the weekday number instead of TEXT(…,"ddd"): the same in every language and every app.
Month · text under a dayIF(MONTH(B8)<>$B$4,"",holiday&" · "&event&" +1 more")Blank for days outside the month. Otherwise the holiday name from Setup, the first event from Events, and a count of any further events that day.
Month · first event of a dayIFERROR(INDEX(ev_text,MATCH(B8*10+1,ev_keys,0)),"")Looks up the key 'date × 10 + 1'. The Events sheet numbers events that share a date, so the 2nd event is key +2 and so on — no array formulas.
Month · '+N more'IF(COUNTIF(ev_dates,B8)>1," +"&(COUNTIF(ev_dates,B8)-1)&" more","")How many events that day beyond the first.
Month · other-month greyConditional format: =MONTH(B$8)<>$B$4Applied to both the number row and the text row of each week, anchored to the number row.
Month · weekend / holiday / todayWEEKDAY(B$8,2)>5 · =COUNTIF(hol_dates,B$8)>0 · =B$8=TODAY()Three more rules on the same range. TODAY() recalculates when the file opens.
Month · weekend daysINT((K7-1-MOD(6-WEEKDAY($E$3,2),7))/7)+INT((K7-1-MOD(7-WEEKDAY($E$3,2),7))/7)+2Saturdays plus Sundays. MOD(6-weekday,7) is the offset from the 1st to the first Saturday; every 7 days after that is another one. No arrays, no NETWORKDAYS.
Events · # that dayIF(A5="",0,COUNTIF($A$5:A5,A5))Running count of this date so far — 1 for the first event on a day, 2 for the second.
Events · keyIF(A5="",0,A5*10+D5)Date serial × 10 + that number. Unique per event, numeric, so MATCH finds it exactly.
Year · a day cellIF(MONTH(x)<>9,"",x) where x = DATE($B$3,9,1)-WEEKDAY(DATE($B$3,9,1),$E$3)+1+offsetSame grid-start arithmetic per month; days outside the month are blank so the mini-month reads cleanly.
Week · start$B$3-WEEKDAY($B$3,IF(Setup!B5="Sunday",1,2))+1Any date you type is snapped back to the start of its week.
Week · event slot kIFERROR(INDEX(ev_text,MATCH(A$5*10+k,ev_keys,0)),"")Six slots per day, keys +1 … +6.