考勤天数统计

看到题目需求后,最后需要得出两个值:1.出勤总天数;2.周日的天数。
这里有三个问题需要我们解决:
1. 文本值日期数据难以直接参与计算,如何转化成数值型数据?
由于一天有多条打卡记录如何每一天只取出1次?
3. 如何判断打卡的日期是否是周日?
当知道这些数据后,周末加班天数和出勤总天数就可以用SUM函数或者COUNT函数来得出。
问题一解决办法
这里的日期时间由于是系统自动导出,所有的值都为文本值,这里就需要引入一个名为DATEVALUE的函数。
解决文本日期转化数值日期的问题,这里拿到的都是年月日的日期,但是时间(小时、分、秒)会忽略掉。
=DATEVALUE(D2:D111)
那么问题一就得到解决
问题二解决办法
这里本质上就是取得重复值的第一次,这里就需要引入一个函数UNIQUE,这个函数会使得这一过程变得非常简单。
我们先来认识一下这个函数,例如A1=",A2=",A3=",A4=",那么写出函数=UNIQUE(A1:A4),下拉填充三个单元格,结果是","
这里其实隐藏了2个参数,本来默认UNIQUE函数有3个参数
UNIQUE(去重区域,按行或者按列,唯一值提取还是去重)
第二个参数不填就默认为FALSE按照行来TRUE就表示按列,大多数情况一般都是按行来。
第三个参数不填默认是FALSE,表示是去重;如果是提取唯一值那么就是TRUE,以刚才那个例子来看如果函数是=UNIQUE(A1:A4,,TRUE),结果就是","
所以最后为了取到重复值的唯一的日期值那么函数为
=UNIQUE(DATEVALUE(D2:D111))
问题三解决办法
这里要判断是否是周日,也就是这个日期是否是星期七,这里就需要引入一个关于日期函数WEEKDAY
比如
A1=2022-6-22,=WEEKDAY(A1,2),那么返回会是3,表示星期三。WEEKDAY第二个参数一般填21这样来对应。
所以判断是否是周日,直接判断函数返回值是否是7就OK。
函数为
=WEEKDAY(UNIQUE(DATEVALUE(D2:D111)),2)=7)
这三个问题都解决之后就需要开始写函数了
周日加班天数
=SUM(--(WEEKDAY(UNIQUE(DATEVALUE(D2:D111)),2)=7))
这里有一个知识点,必须让WEEKDAY函数与7返回的逻辑值数组进行运算操作。
原理是:
直接键入到参数表中的数字、逻辑值及数字的文本表达式将被计算
参数为数组或引用只有其中的数字将被计算数组或引用中的空白单元格、逻辑值、文本或错误值将被忽略。
如果参数为错误值或为不能转换成数字的文本,将会导致错误。
所以这里需要前面加上"--"或者乘以1都可以。
出勤总天数
=COUNT(UNIQUE(DATEVALUE(D2:D111)))
如图二、图三

006
