怎样在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天,w<=b扣减1天;2. 42-m-a+1<=7,当w>b,扣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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-28

1.先在表上留三行空白,在第四行写个名字。

2.选择A1:H1,点【合并后居中】。

3.双击单元格,输入公式:=TEXT(NOW(),"yyyy年mm月考勤表")。(注意:为了防止6月份该函数自动变化,可以在月末改成数值保存。)

4.在B3输入1,并向右填充日期,本例填充7天,也就是当月的1到7号。(注意:我是简写的,实际情况可以填充到31,并用IF判断,如果超过本月的最大天数显示空白。)

5.在B2输入当月的第一天,并向右填充,然后选中填好的日期点击右键,选择【设置单元格格式】。(注意:这里也可以用时间公式完成。如果月份和年份处用下拉菜单生成,此处和表头均可以用公式自动生成,不会随着时间变化而变)

6.在【自定义】处输入:aaaa,并点击【确定】按钮。这样就显示星期几了。

7.在一个不用的空白列输入对考勤的标记,然后选中按右键,点击【定义名称】。

8.格子点到B4,选择上方的【数据】,然后点【数据验证】-【数据验证】。

9.在设置里允许下选择序列,来源写(=选项1),点击确定就可以了。

10.我们再在后面做个统计的。在记录区域的右方,如下图设置统计格式。其中I4:N4要输入公式统计。

11.双击I4单元格,输入公式:=COUNTIF(B4:H4,I3)。(注意:公式中对原始区域和表头的引用是特别要关注的地方。)

12.然后把第一个统计好的往右边拉全部的统计就都出来了。

本回答被网友采纳
第2个回答  2022-12-28

问题提得有笼统,主要“一个月”这个数据是怎样的不明确,所以下面的回答只是一种“一个月”的情况。且“统计”还是“计算”,概念也是不同的。如图,B2中的“12”表示12月份,至于年份,那就今年吧。B3中的“3”是要计算的“星期几”。如真是“统计”,貌似应该是拉出一个月的日期数据序列,再对这一列数据来分析,才是“统计”。下面是按“计算”处理的。在B4中输入公式:

=COUNT(0/(WEEKDAY(ROW(INDIRECT(DATE(2022,B2,1)&":"&DATE(2022,B2+1,1)-1)),2)=B3))

得到2022年12月有4个星期三。

如果Excel不是最新的2021或Office365,则公式为数组公式,要同时按Ctrl+Shift+Enter三键输入数组公式。

把B3中3修改为4,B4中结果变成5,表示本月有5个星期四。如图