怎样在excel表格里统计一个月里有多少个星期几
给你看个图让你明白计算机的算法,用编程思路套个公式给你看,逻辑绕,可不简单的
你看懂没有日历为啥是6*7=42个格子,依据这个原理你来推算,一个月余留变灰的格子是:42-月天数=42-DAY(EOMONTH(日期,MONTH(日期)))这个月就是11。
一个月的第一天是星期几就注定日期顶部变灰格子:WEEKDAY(日期),12月是星期四公式显示是5,所以它顶部变灰就是WEEKDAY(日期)-1格,月前有周1-周3每个1天。
那么还剩下应该成灰色的部分就是11-3=8,一个月最后一天是星期六,那你该明白了,剩下的8天有周1-周6每个一天,周日2天。
至此一个明明白白的算法就出来的,我们用w代表你的参数星期几,用m代表这个月总天数,用a代表月第一天星期几,用b代表最后一天星期几,用s代表这个月星期几数量,算法是分两种情况:
1.w>=a,第一排没有灰色覆盖,不需要扣除一天2.w<a,第一排有灰色覆盖,需要扣除一天。
头尾都要算尾部逻辑:1.42-m-a+1>7,覆盖后面一排,在这个基础上判断最后一天逻辑w>b,扣减2天,wb,扣1天,当w<=b不扣
总结上面规律(x=表达式?a:b意思是如果表达式成立就是a不成立就是b):
head=w>=a?0:-1
end=42-m-a+1>7?(w>b?-2:-1):(w>b?-1:0)
s=6+head+end=6+(w>=a?0:-1)+(42-m-a+1>7?(w>b?-2:-1):(w>b?-1:0))
翻译成EXCEL公式格式:
s=6+if(w>=a,0,-1)+if(42-m-a+1>7,if(w>b,-2,-1),if(w>b,-1,0))
进一步把代码转换成公式:
s=6+if(w>=a,0,-1)+if(42-DAY(EOMONTH(J13,MONTH(J13)))-a+1>7,if(w>b,-2,-1),if(w>b,-1,0))
继续套b=WEEKDAY(EOMONTH(J13,0))-1
a=WEEKDAY(YEAR(J13)&/&MONTH(J13)&/01))-1
代进去w你再处理下,假设你是设置J14是w,那么就是:
=6+IF(J14>=WEEKDAY(YEAR(J13)&/&MONTH(J13)&/1)-1,0,-1)+IF(42-DAY(EOMONTH(J13,MONTH(J13)))-WEEKDAY(DATEVALUE(YEAR(J13)&/&MONTH(J13)&/01))+2>7,IF(J14>WEEKDAY(EOMONTH(J13,0))-1,-2,-1),IF(J14>WEEKDAY(EOMONTH(J13,0))-1,-1,0))
你好好看看真的用公式去实现方便吗?还不如用VBA
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇