EP02. “Calendar 制作万年历”
🔒 登录后可标记已读- 这篇教怎么用日期函数做一份"输入年份就自动生成整年日历"的万年历模板
- 核心是用 DATE + WEEKDAY 算出每个月第一天该对齐星期几,再用公式往后排出整个月的日期格子
- 前置知识是基本的命名范围(Named Range)操作和 DATE/WEEKDAY 函数概念,属于进阶模板制作
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等),示范文件为 .xlsm(含宏的工作簿格式)。
理解 Excel 怎么存日期
Excel 内部把日期存成一个序号数字(从 1900 年开始累加),例如 2025 年 1 月 1 日在内部对应数字 45658。WEEKDAY 函数可以把这个数字换算成星期几,默认返回 1~7(1 = 星期日,7 = 星期六)。
设置命名范围
CalendarYear:指向存放年份的单元格(例如 K5),用户在这里输入想生成日历的年份JanOffset:算出「当年 1 月 1 日」往前推算到最近一个星期日的日期,公式为:
=DATE(CalendarYear,1,1)-WEEKDAY(DATE(CalendarYear,1,1))
这个偏移量决定了日历网格第一格该放哪一天(因为月历通常从星期日开始排,1 号不一定正好是星期日)
日历格子公式
- 在日历第一格(例如 B4)写公式:判断
JanOffset + 1算出来的日期是不是属于「1 月」,如果是就显示这个日期数字,不是就显示空白(代表这一格用来对齐星期几,不属于本月) - 后续格子(例如 E4)依此类推,每格的偏移量往后加 1,同时判断年份和月份是否仍属于目标月份
格式设置
把算出来的日期格式改成「只显示日期数字」(不显示完整年月日),这样格子里只会看到 1、2、3……这种纯数字,符合一般月历的外观。
[截图:完成后的万年历效果,输入年份后自动生成的月历网格,日期数字对齐正确的星期几栏位]
学完你会
- ✅ 理解 Excel 内部把日期存成序号数字,
WEEKDAY能把它换算成星期几 - ✅ 会用命名范围(CalendarYear、JanOffset)让整份日历只改一个单元格就能换年份
- ✅ 会判断格子里的日期是否仍属于当月,避免上个月/下个月的日期跑进格子里
常见错误
- 忘记设置 CalendarYear 和 JanOffset 这两个命名范围,直接在公式里写死年份,导致换年份时要逐格改公式而不是改一个单元格
- WEEKDAY 函数没注意默认起始是星期日(1),如果习惯以星期一为一周开始,需要另外调整第二参数
- 日历格子公式没做「是否仍属于当月」的判断,导致上个月/下个月的日期也被算进来,格子里出现不该显示的数字
Sources
Blog / Website: