Most calendar templates are a picture of one year. This one is arithmetic: the first of the
month, stepped back to the start of its week, plus an offset — so every cell in the grid is a
real date and the whole thing redraws when you change the year or the month. Weekends shade
themselves, today turns blue, the days that belong to August or October go grey.
Events live in a list — date, text — and appear under the right day. Two on the same day?
The first is shown and the rest are counted, and the Week sheet lists them all.
Pro: the year, the week, the holidays
The Year sheet lays out twelve months on one printable page from the same settings. The Week
sheet takes any date and shows that week with up to six events a day. Holidays come from a
list on Setup: pink on Month and Year, named in the day, named on Week. The Events sheet grows
to two hundred rows with a category dropdown.
No array formulas, no TEXT()
Finding “the second event on the 15th” usually needs an array formula, which Numbers and older
Excel handle differently. Instead, the Events sheet numbers events that share a date and builds
a numeric key — date × 10 + number — so a plain INDEX/MATCH finds the first, second or sixth
event. Day names come from CHOOSE(WEEKDAY(…)) rather than TEXT(…,"ddd"), which changes
with the app’s language. Every one of these is on the Formulas sheet.
Checked, not just built
The build recalculates the workbook in LibreOffice and in a second, independent engine and
compares forty-three values — grid start, day names, the text under specific days including
the holiday and the “+1 more”, the counts, the week lookups, the year blocks — against numbers
computed outside Excel.