考勤表能自动识别休息日的必须前提是要知道一年365天,每一天是休息还是上班,如图2
图2 一年365天上班还是休假标识那么一年365天,如何快速判断每一天是休息还是上班?就要用If函数的多层嵌套(多种情况分支)来判断。
假设双休的情况下,周一至周五需要上班,周末两天是休息的,但是考虑国家法定节日放假,那么就存在周一至周五也可能是休息的,同时因为法定节日放假调休,而导致有的周末也要上班,如下表2024年国家法定节日放假安排。
图3 2024年国家法定节日放假及调休安排那么,考虑法定节日放假调休安排,就不能简单地根据每一天是星期几来判断休息还是上班。在判断之前,我们需要将法定节日放假日期及因为放假将原本是周末而调为上班的日期先标识出来。
标识法定节日放假日期及因为放假将原本是周末而调为上班的日期,可以用index+match函数组合或者vlookup函数查询出来做标识,很简单,表中我已经标识出来了,不会的可以下载附件看下。
If函数的多分支情况判断,判断条件成立的话,必然能得到一个确定的返回,不成立的话,就要再嵌套if分情况来判断。所以这种多分支情况的判断,我们一般需要先从特殊情况着手进行第一个判断。
为了讲解方便,我们将2024年1月1日这条数据先复制到标题行上面,公式写到G1单元格。
那么本案例中,我们先看D列:本来是周末,实际调为上班的日期入手。如果D列标识为“上班”,那么这一天肯定是需要上班的,如果未作标识,那么就要看C列的标识情况,函数写为=IF(D1="上班","上班",)
图4 根据D列进行第一层判断:本来是周末,实际调为上班如果C列的标识为节日,则表示放假休息,如果未作标识,那么就要看A列的标识情况。C列的标识为节日,因为节假日字符数都大于1,所以可以用LEN(C1)>1表示C列是法定节日放假日,所以G1公式写作=IF(D1="上班","上班",IF(LEN(C1)>1,"休",)
图5 根据C列进行第二层判断:标识为节日,则表示放假休息
如果A列的标识为节日日期为周末,则是休息日,其余情况上班,其余只有一种情况,即日期为周一至周五,不需要再写IF(WEEKDAY(A1,2)<6,”上班”)。G1公式写作 =IF(D1="上班","上班",IF(LEN(C1)>1,"休",IF(WEEKDAY(A1,2)>5,"休","上班")))。
图5 根据A列进行第三层判断:标识为节日日期为周末,则是休息日,其余情况上班
注:计算某一天是周几,可以用weekday函数,weekday(日期,2)表示一周从周一开始,计算的结果:周一=1,周二=2…周日=7。If(weekday(A1,2)>5,,),表示如果计算结果是周六、周日,则…,否则…
至此,所有的情况都已经判断完毕。
If函数多种情况分支判断公式并不难,但需要去理解其中的判断逻辑。上面我们讲的是从D列标识开始判断,那么从C列入手开始第一个判断,你会了吗
今天的分享就是这些了,希望能帮助你加深对if函数嵌套的理解。喜欢的朋友,请点赞、转发。