一个公式制作如图所示的简易万年历,更改年份和月份自动更新。
简易万年历
获取当月第1天
DATE引用指定的年份和月份,获取该月份的第1天:
=DATE(D2,E2,1)
获取当月第1天
获取当月第1周的星期一
由于周一到周日的排列方式,D4单元格的内容是:当月第1周星期一的日期。
2023/7/1是当月第1周的星期六, D4单元格的日期是2023/7/1减去5天。由此总结:
当月1日是星期一,当月第1周的星期一等于当月1日减0天;
当月1日是星期二,当月第1周的星期一等于当月1日减1天;
当月1日是星期三,当月第1周的星期一等于当月1日减2天;
……
当月第1周的星期一 = 当月1日 – (当月1日的星期数-1)
上一步中已经获取了当月1日:
=DATE(D2,E2,1)
(当月1日的星期数-1):
=WEEKDAY(DATE(D2,E2,1),3)
WEEKDAY的作用是返回日期的星期数,第二参数设置为3表示“从0(星期一)到6(星期天)的数字”,如:2023/7/1是星期六,则返回数字5.
两者相减:
=DATE(D2,E2,1)-WEEKDAY(DATE(D2,E2,1),3)
当月第1周的星期一
递增队列
=SEQUENCE(6,7,0)
SEQUENCE产生一个6行7列,起始数为0,以1递增的数字队列。
数字队列
日期的递增队列
把上2步的首个日期和队列相加,即得到42个连续的日期队列:
=DATE(D2,E2,1)-WEEKDAY(DATE(D2,E2,1),3)+SEQUENCE(6,7,0)
日期的递增队列
弱化显示非当月日期
单元格月份不等于指定月份,则执行条件格式,用浅灰色将其弱化显示:
=MONTH(D4)<>$E$2
条件格式设置
