在【开发工具】选项卡下,单击【插入】-【数值调节控件】:PS. 如果没有【开发工具】选项卡,在【文件】-【选项】-【高级】中调出即可。指定「单元格链接」为 C2 单元格,其他参数如图下所示:
也就是说,只需要确定第一个单元格的日期,就能确定其他单元格的日期。只要确定每月的 1 号的上一个周一的日期是多少,就能确定第一个单元格的日期。比如说,2021 年 7 月 1 号是周四,那么如下图:7 月 1 号的日期-4+1,就是 7 月 1 号前面的第一个周一的日期。即,每月的 1 号的上一个周一 = 每月 1 号的日期-每月 1 号的星期数+1。
=WEEKDAY(serial_number,[return_type])
=WEEKDAY(日期,2)由于我们习惯把周一开始作为每周第一天,所以第 2 参数一般设置为 2。前面说过,每月的 1 号的上一个周一=每月 1 号的日期-每月 1 号的星期数+1。
=DATE(2021,$C$2,1)-WEEKDAY(DATE(2021,$C$2,1),2)+1
设置完对应的公式之后,我们还需要把不是当月的日期进行隐藏,这里就需要使用到【条件格式】了。❶ 选中 B5:H10 区域,在【开始】选项卡下,单击【条件格式】-【新建规则】;❷ 选择【使用公式确定要设置格式的单元格】,输入设置格式的公式:
这样,我们就可以将不是当月日期的字体变成白色,肉眼上就看不到了,从而实现隐藏的效果。PS. 这里条件格式公式的原理是:把显示为 TRUE 的单元格的字体设置为白色。❹ 最后,我们只需要将数字格式自定义设置为只保留日就行了。① 选中[B5:H10]区域,按住快捷键【Ctrl+1】弹出单元格设置对话框;前面我们是将日期的中的月,联动到单元格中,那我们也可以将年联动到单元格中。
=DATE(2021,$C$2,1)-WEEKDAY(DATE(2021,$C$2,1),2)+1
那将之前的年份 2021 改为单元格引用,就可以做出如下图的效果:
=DATE($G$2,$C$2,1)-WEEKDAY(DATE($G$2,$C$2,1),2)+1
那如果我们想要在日历表中,是当天的日期,就高亮显示,这应该怎么做?❶ 选择[B5:H10]区域,在【开始】选项卡下,单击【条件格式】,新建规则。❷ 使用公式确定要设置格式的单元格,输入如下公式:
=AND(YEAR(TODAY())=$G$2,MONTH(TODAY())=$C$2,DAY(B5)=DAY(TODAY()),MONTH(B5)=$C$2)
=AND(
YEAR(TODAY())=$G$2, 年等于当前的年
MONTH(TODAY())=$C$2, 月等于当前的月
DAY(B5)=DAY(TODAY()), 日等于当前的日
MONTH(B5)=$C$2 每个单元格等于选定的月
)
PS. 本文截图时间是 8 月 2 号,所以下图中对应日期显示绿色填充颜色。当然,有时候,我还会用加载项-mini calendar。本文介绍了日历表的函数做法,其中涉及的主要知识点有:❶ date 函数,weekday 函数,条件格式。❸ 制作这种日历,我们只需要确定第一个单元格的日期,也就是每个月的 1 号之前的第一个周一的日期。❹ 将月份和年份,联动到单元格中,参数化,是个比较常见的编程思维。