在Excel中,用于处理星期的函数主要包括WEEKDAY、WEEKNUM及ISOWEEKNUM函数。除此之外,也经常用MOD函数和TEXT函数完成星期值的处理。
一、用WEEKDAY函数返回指定日期的星期值
WEEKDAY函数返回对应于某个日期的一周中的第几天。默认情况下,天数是 1(星期日)~7(星期六)的整数,该函数的基本语法如下。
WEEKDAY(serial_number,[return type])
return_type参数用于确定返回值的类型,常用不同的参数对应返回值的类型如下。
1或省略:数字1(星期日)~7(星期六)
2:数字1(星期一)~7(星期日)
WEEKDAY函数的第二参数使用2时,返回数字1~7分别表示星期一至星期日。以下公式可以返回系统当前年份的1月1日是星期几。
=WEEKDAY("1-1”,2)
如果系统当前年份为2018年,公式结果将返回1,即星期一。
例 计算指定日期是星期几
如下图所示,分别使用不同函数判断B1:H1单元格中的日期是星期几。B2单元格公式为:
=WEEKDAY(B1,2)
WEEKDAY函数的第二参数为2,返回1~7的数字,表示从星期一到星期日为一周。
B3单元格公式为:
=MOD(B1-2,7) 1
MOD函数根据每周均由星期一到星期日7天循环的原理,计算日期与7相除的余数.
MOD函数中被除数减2结果 1,返回结果与WEEKDAY函数相同的数值。
B4:B7单元格公式分别如下。
=TEXT(B1,"aaaa")
=TEXT(B1,"aaa")
=TEXT(B1,"dddd")
=TEXT(B1,"ddd")
TEXT函数的第二参数利用了Excel的内置数字格式代码。
第二参数使用“aaaa时,返回中文“星期一”。
第二参数使用“aaa”时,返回中文星期简写“一”。
第二参数使用"dddd"时,返回英文“Monday”。
第二参数使用“ddd“时,返回英文星期简写“Mon”。
例 计算员工每月发薪日
某公司规定,每月20日为员工固定发薪日,如果恰逢20日是周六或周日,则提前至周五发薪。如下图所示,需要根据A列中的月份,计算出每月发薪日。
在B3单元格中输入以下公式,并向下复制到B14单元格。
=DATE(2016,A3,20)-TEXT(WEEKDAY(DATE(2016,A3,20),2)-5,"0;!0;!0")
首先用“DATE(2016,A3,20)”组成一个日期,该日期年份为2016,月份由A3单元格指定,一月中的天数为20。再用WEEKDAY函数计算出该日期是星期几。用WEEKDAY的计算结果减去5之后,如果日期是星期六,则结果为1。如果日期是星期日,则结果为2,如果日期是星期一到星期五,则显示为负数或零。
TEXT函数使用格式代码“”"0;!0;!0"”,将正数部分显示为原有的值,将负数和零强制显示为0。最后用“DATE(2016,A3,20)”减去TEXT函数的计算结果,如果日期是星期一到星期五,则减去0; 如果日期是星期六,则减去 1; 如果日期是星期日,则减去2,最终得到实际发薪日。
例 计算指定日期所在月份有几个休假日(约定为星期日为休假日)
如下图所示,需要计算A列日期所在月份有几个休假日,其实就是统计有几个星期日。
在B2单元格中输入以下数组公式,按<CTRL Shift Enter>组合键,向下复制到B7单元格。
{=COUNT(0/WEEKDAY (TEXT(A2,"e-m")&-ROW($1:$31),2)=7))}
首先,用TEXT函数返回A2单元格的日期“年-月”,再用文本连接符与“ROW($1:$31)”连接,得到一组日期样式的字符串。
("2016-6-1";"2016-2-2";"2016-6-3";……;"2016-6-30";"2016-6-31")
然后,用WEEKDAY函数依次判断这些字符串是星期几,对于实际不存在的日期,
如2016-6-31,将返回错误值#VALUE!,得到内存数组结果为:
(3;4;5;6;7;1;2;3;4;5;6;7;1;2;3;4;5;6;7;1;2;3;4;5;6;7;1;2;3;4;#VALUE!}
再用等式判断以上结果是否等于7,得到由逻辑值TRUE、FALSE及错误值构成的新内存数组。
(FALSE;FALSE;FALSE;FALSE;TRUE;...; #VALUE!)
接下来用0除以以上内存数组,0除以TRUE结果为0,0除以FALSE和错误值,结果为错误值#DIV/0!和#VALUE!。
(#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0;……; #VALUE!)
最后,用COUNT函数统计其中的数值个数,得到的结果就是每个月的星期日天数。
也可以使用以下数组公式完成同样的计算。
{=COUNT(0/(MOD(TEXT(A2,"e-m")&-ROW($1:$31),7)=1))}
先用TEXT函数构成1~31日的日期样式的字符串。
再用MOD函数计算日期字符串与7相除的余数,如果日期为星期日,MOD函数果为1。对于不存在的日期返回错误值#VALUE!。
接下来用等式判断MOD函数的结果是否等于1,返回由逻辑值和错误值#VALUE!构成的内存数组。
0除以内存数组结果,最后使用COUNT函数计算相除后的数值个数。
二、使用WEEKNUM函数判断周数
WEEKNUM函数返回指定日期属于全年的第几周,该函数的语法结构与WEEKDAY函数的语法结构完全相同。因为习惯上把星期一到星期日算作一周,所以通常将WEEKNUM函数的return_type参数设置为2。
例 判断指定日期是当年的第几周
如图所示,分别使用WEEKNUM函数,判断A列日期是该年的第几周。
在B2单元格中输入以下公式,并向下复制到B7单元格。
=WEEKNUM(A2,2)
WEEKNUM函数将包含1月1日的周识别为该年的第1周,A5单元格中的2017年1月1日被判断为该年度的第1周。
例 计算母亲节的日期
在B2单元格中使用以下公式。
(A2&"-5-1")-WEEKDAY(A2&"-5-1",2) 14
首先将A2与字符串“-5-1”连接,得到能够被Excel识别为日期的新字符串“2015-5-1”。使用WEEKDAY函数返回表示2015年5月1日星期的数值5,再用“2015-5-1”减去当天的星期值,得到上一个星期日的日期。最后加上14天,计算出该年5月份的第二个星期日,即母亲节的日期。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved