本周同学会专栏,我分两期,简单介绍一下Excel日历的制作及应用。


今天,先跟我来用最简单的公式,制作一张Excel动态日历。


▲ 目标效果


第1步:设计框架


我们将日历固定到7列——周一到周日,最多需要6行就可以展示一个月的所有天数。



B2、D2单元格用来选择年份和月份,B4:H4区域输入周一至周日。


第2步:编写公式


日历中看似有很多单元格,但实际上最关键的一个单元格就是B5单元格。B5单元格的公式确定了,后面的单元格只要依次加1就OK。


B5单元格的日期怎么确定呢?



由于周一到周日的位置是固定的,而每个月的第1天究竟是周几是不固定的,因此我们要做判断:


如果月份第1天恰好是周一,那B5单元格就应该返回当月的1号这天的日期;否则,就根据当月1号实际是星期几来计算这一天的日期。


以2021年1月1日为例,这一天实际是星期五,应该填入F5单元格。因此,B5单元格应该是往前推4天,即2020年12月28日(用2021/1/1-5+1)。


把以上的逻辑用公式表达出来,B5单元格的公式为:


=IF(WEEKDAY(DATE($B$2,$D$2,1),2)=1,DATE($B$2,D$2,1),DATE($B$2,$D$2,1)-WEEKDAY(DATE($B$2,$D$2,1),2)+1)


其它单元格只要依次+1天就好,因此最简单的公式就是用上一个单元格加1,比如C5单元格公式:=B5+1。



当然,如果你觉得这种方式不能一次把公式复制到所有日期单元格,也可以写一个更厉害的公式:



接下来,选中所有日期单元格,打开单元格格式,设置自定义格式:dd。



这样,所有日期都只显示天数。



第3步:条件格式


经过第2步,日历的雏形就完成了,但是由于42个日期单元格中都显示天数,而我们只希望展示当月的天数。


简单!用条件格式做一个判断——如果单元格日期对应月份与D2单元格相同,说明是本月日期要展示;否则,如果不等于D2单元格,则不展示。


选择B5:H10,设置条件公式:=MONTH(B5)<>$D$2,并将条件格式设置为自定义格式:;;;(三个英文的分号)。



确定后,非当月的日期就自动“消失”了!



为了方便选择年月,你还可以将B2和D2单元格设置为下拉单元格。这样,一个动态的Excel日历就做好了。



最后,如果你想做一张全年12个月的日历,只要将已经做好的日历另外复制11份,做简单调整即可。



你看,原来自己动手做一张日历也并不难呀,是不是?


下一期,我接着来跟大家介绍Excel日历的用途,在我们实际工作中,能有哪些应用价值。