本
文
摘
要
2022年了,用Excel给自己做个日历吧
大概长这样
1
准备一张参数表
参数表大概分两部块,红色块是手动编辑的,蓝色块是套用公式。左边的红色块是从日期2022-1-1下拉到2022-12-31,右边的红色块是根据已公布的2022年假期安排。
蓝色块公式部分:
a.农历日期B2单元格 =SUBSTITUTE(SUBSTITUTE(TEXT(A2,"[$-130000][dbnum1]yyyy年m月"&IF((--TEXT(A2,"[$-130000]d"))<11,"初","")&"d"),"年一月","年正月"),"十二月","腊月")
简单解释下 TEXT(A2,"[$-130000][dbnum1] 的作用是把A1单元格的公里日期转化成农历,后面的是根据农历日小于11的替换为‘初几’,例如10号就是初十,11号则是十一,再把一月替换为正月,十二月替换为腊月。
b.辅助列C列则是进行判断是否为节假日,C2单元格=IFERROR(IF(VLOOKUP(A2,$K$2:$L$51,2,0)<>0,VLOOKUP(A2,$K$2:$L$51,2,0),IF(RIGHT(B2,3)="二十九",RIGHT(B2,3),IF(RIGHT(B2,2)="初一",MID(B2,6,2),RIGHT(B2,2)))),"")
从右边节假日引用如果是就显示节假日名称,不是则提取农历日期的后两位,如果遇到初一这种,就直接显示月份(比如日历上的农历,腊月初一直接显示为腊月,腊月初二则显示为初二)
c.根据前一列数据做出的调整,D2单元格=IF(C2<>"",C2,IF(RIGHT(B2,3)="二十九",RIGHT(B2,3),IF(RIGHT(B2,2)="初一",MID(B2,6,2),RIGHT(B2,2))))
d.状态D列则是直接匹配右边的调休/补班信息,D2单元格=IFERROR(VLOOKUP(A2,$K$2:$M$51,3,0),"")
2
画一个日历框架
a.每一个大格子是 两列三行,具体的长宽信息(参考我自己做的)
1列宽:3
2列宽:5
1行高:33.75
2行高:12.25
3行公式需求11.25
相当于一个大格子里有6个小格子(为了日历美观,小格子边框不显示)
b.填充公式,需要填充公式的只有3个格子,就是上图标记的前3;一个格子最大显示的信息也只有3个,可以观察下元旦那个格子,竖着两列可以理解,为什么需要三行呢,下面只显示了一行信息多出的一行是干嘛的呢?这个是要填充公式的原因,具体不展开说,在实际做的时候可以试试只要两行会出现什么问题。
单元格D7也就是格子1 =DATE($D$3,$D$4,1)-WEEKDAY(DATE($D$3,$D$4,1),2)+INT(COLUMN(A:A)/2)+INT((ROW(1:1)-1)/3)*7
单元格E7也就是格子2 =IF(MONTH(D7)=$D$4,VLOOKUP(D7,参数表!$A$2:$E$366,5,0),"")
单元格D8也就是格子3 =IF(MONTH(D7)=$D$4,VLOOKUP(D7,参数表!$A$2:$E$366,4,0),"")
这三个公式第一个比较复杂不做展开说明,后面两个相对比较容易理解,就是符合条件再进行匹配,之所以要进行个月份判断,是因为想要的效果是农历日期(或加班调休)只显示当月的,上/下月的不显示,如果想要都显示,
可以把IF(MONTH(D7)=$D$4, 改为IFERROR(
注意看上面色块标记的地方。
公式填充参照这个动图
c.格式调整,将格子的第三行两个小单元格进行合并,可以使农历日期居中显示,为什么没有一开始合并呢,因为不方便拖动公式。
选中日历区域-条件格式-新建规则-只为包含以下内容的单元格设置格式,设置区域选则特殊文本-包含-休,格式设置为蓝色
在用同样办法将‘班’设置为红色
最后在插入自己喜欢的背景图就可以啦(注意图层设置置于底层)