excelperfect Q:给定开始日期和结束日期,想要知道这两个日期之间有多少个星期一?例如下图1所示,2021年7月1日至2021年8月8日之间有多少个星期一,如何使用公式得到答案。 图1 A:可以使用公式: =SUMPRODUCT(--(TEXT(ROW(INDIRECT(B1&':'&B2)),'aaaa')='星期一')) 结果如下图2所示。 图2 众所周知,Excel是使用数字序列来存储日期的,显示的是日期形式,实际上就是一个数字。默认情况下1900年1月1日是数字序列1,而2021年7月1日是数字序列44378,因为它在1900年1月1日之后的第44378天。同理,2021年8月8日是数字序列44416。 公式中: INDIRECT(B1&':'&B2) 生成: INDIRECT(44378, 44416) 这样: ROW(INDIRECT(44378, 44416)) 即为: ROW(44378:44416) 返回数组: {44378;44379;44380;44381;…;44415;44416} 传给指定格式参数的TEXT函数,得到: {“星期四”;”星期五”;”星期六”;…;”星期日”} 与“星期一”进行比较,生成包含TRUE/FALSE值的数组: {FALSE;FALSE;FALSE;FALSE;TRUE;…;FALSE} 前面的双减号将其转化为1/0值: {0;0;0;0;1;…;0} 传递给SUMPRODUCT函数进行求和,结果即为该日期区间包含“星期一”的数量。 下面是另外一些公式: 公式1: =B2-B1-NETWORKDAYS.INTL(B1,B2,12)+1 公式2: =SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(B1&':'&B2)))=2)) 公式3: =SUMPRODUCT(N(WEEKDAY(ROW(INDIRECT(B1&':'&B2)))=2)) 公式4: =(WEEKDAY(B1,2)=1)+QUOTIENT(B2-B1,7)+(WEEKDAY(B2,2)<WEEKDAY(B1,2)) 公式5: =IF(WEEKDAY(B1,11)=1,0)+INT(DAYS(B2,B1)/7)+IF(MOD(DAYS(B2,B1),7)+WEEKDAY(B1,11)>7,1,0) 公式6: =ABS(INT((N(B2)-2)/7)-INT((N(B1)-2)/7)) 公式7: =MAX(ROUNDUP(((B2-B1+1)+(IF(WEEKDAY(B1)>2,WEEKDAY(B1)-9,WEEKDAY(B1)-2)))/7,0),0) 公式8: =ROUNDDOWN((((B2-B1+1)-CHOOSE(WEEKDAY(B1),1,0,6,5,4,3,2))/7)+1,0) |
|
来自: hercules028 > 《excel》