weekday返回一周中的第几天

-01-
函数说明
weekday返回某个日期是一周中的第几天。有2个参数,语法结构如下:
WEEKDAY(serial_number,[return_type])

第1参数Serial_number:是一个日期,可以是返回日期的任意数据。
第2参数Return_type:是一个可选参数。代表返回值类型的数字。有好几种情况。类型1代表的是美国的习惯,一周的第1天是星期日,最后1天是星期六。类型2代表的是中国的习惯,一周的第1天是星期一,最后1天是星期日。也就是1代表星期一,7代表星期日。我们第2参数常用的类型是2。如果第2参数忽略不写,用的是类型1。其他的类型你可以自己看一下。
-02-
示例解释
看了上面参数的解释,你可能还是不知道它是怎么算的。下面以今天的日期为例说明一下。weekday第1参数是2020/4/8,第2参数选1,也就是美国的习惯,返回的结果为4。这个4可不是星期四,它是一周的第4天。美国一周的第1天是星期日,所以第4天是星期三。你可以参考下图的日历。
再来看下中国的习惯,第1参数还是2020/4/8,第2参数选2,返回的结果为3。也就是一周的第3天,同时它也是星期三,因为中国一周的第1天是星期一,还是参考下图的日历。
-03-
具体应用

1.求下列日期是星期几
在B7单元格输入公式=WEEKDAY(A7,2),向下填充。第2参数选2,是我们中国的习惯。返回的数字就是星期几。很简单,有木有。我之前提过一次,求星期几也可以用mod函数。因为每周只有7天,而且都是1到7周期循环。mod正好有周期循环的特性。在C7单元格输入公式=MOD(A7-2,7)+1,向下填充。
如果想要大写的星期几呢?这时可以用text,在D7输入公式=TEXT(A7,"aaaa"),向下填充。
2.判断下列日期是否是周六日
首先用weekday算出日期是周几,然后再判断是否大于5,如果大于,那么就是周六或周日。所以公式为=IF(WEEKDAY(A19,2)>5,"√","")。再和你分享一个技巧,像这种成立的返回一个值,不成立的返回空,还可以用rept函数,公式为=REPT("√",WEEKDAY(A19,2)>5)。
3.求上周日,本周一,本周日的日期
以今天2020/4/8为例说明一下,今天是周三,上周日是2020/4/5,本周一是2020/4/6,本周日是2020/4/12。可以参考下图的日历。题目理解了,那该怎么算呢?上周日的公式为=A31-WEEKDAY(A31,2)。首先用weekday算出日期是周几,然后再用日期减去周几。
还是用今天的日期2020/4/8来说明,2020/4/8是周三,用weekday返回的就是3,然后用2020/4/8减去3得到的日期就是上周日的日期。还是参考上图的日历。2020/4/8减1是2020/4/7,减2是2020/4/6,减3是2020/4/5。
上周日算出来了,本周一和本周日就好算了。本周一的公式为=A31-WEEKDAY(A31,2)+1,在上周日的基础上加1。本周日的公式为=A31-WEEKDAY(A31,2)+7,在上周日的基础上加7。
4.判断2个日期是否在同一周
判断2个日期是否在同一周,只要看它们所在周的周一或周日是否相同,进而也可以看上周日是否相同。所以公式为=REPT("√",A43-WEEKDAY(A43,2)=B43-WEEKDAY(B43,2))。如果2个日期的上周日是相同的,就给个对号。下面给个日历,供你参考。
如果把上面公式的位置改变一下,是不是也可以看做另一种思路呢?公式为=REPT("√",A43-B43=WEEKDAY(A43,2)-WEEKDAY(B43,2))。意思是如果2个日期的差值等于它们星期几的差值,那么它们在同一周。比如2020/4/10减去2020/4/8等于2,2020/4/10是周五,2020/4/8是周三,5减3也等于2。
5.计算日期所在的月份有几个星期一
比如2020/4/8所在的月份是4月,2020年4月有4个星期一,如下图日历所示。公式为=SUMPRODUCT(N(WEEKDAY(ROW(INDIRECT(EOMONTH(A53,-1)+1&":"&EOMONTH(A53,0))),2)=1))。
思路是首先构建出日期所在月份的所有日期,也就是从1号到最后1天的所有日期。然后计算所有日期分别是星期几,最后再统计星期一的个数。
EOMONTH(A53,-1)+1是月初的日期,EOMONTH(A53,0)是月末的日期。ROW(INDIRECT(EOMONTH(A53,-1)+1&":"&EOMONTH(A53,0)))构造出从月初到月末的所有日期,形成一个数组,WEEKDAY(ROW(INDIRECT(EOMONTH(A53,-1)+1&":"&EOMONTH(A53,0))),2)计算所有日期分别是星期几。然后判断是否等于1,也就是是否是星期一,最后用n和sumproduct求和。
还可以用其他的方法,比如=FREQUENCY(WEEKDAY(EOMONTH(A53,-1)+ROW(INDIRECT("1:"&DAY(EOMONTH(A53,0)))),2),1)。
或者=FREQUENCY(MONTH(A53-DAY(A53)+1-WEEKDAY(A53-DAY(A53)+1,2)+ROW($1:$6)*7-6),MONTH(A53)-{0,1})。

链接:
https://pan.baidu.com/s/1Kr6zYLft2jm9tSjTJi7SFw
提取码:bdl3
(0)

相关推荐