excel 基于条件计数记录

xmd2e60i  于 2023-02-25  发布在  其他
关注(0)|答案(4)|浏览(134)

我有一个简单的表。这个数据是2023年1月的。

我想数一下星期一"A"的数目。
我试过了
=COUNTIFS(C3:AG3,"A",$C$2:$AG$2,WEEKDAY($C$2:$AG$2)=2)
但是我没有得到正确的结果

我哪里做错了?

vngu2lb8

vngu2lb81#

您应该像@Harun24HR那样使用带有DOUBLE -ve的SUMPRODUCT。双负数将强制TRUEFALSE的值变为1的0的
由于您的日期实际上只是数字(* 我同意@Rory的观点,即使用日期而不是数字是一个更好的主意。*),您必须将它们转换为日期,您使用DATE()WEEKDAYS()的想法是绝对正确的!
请记住,WEEKDAYS()的语法是WEEKDAY(serial_number,[return_type])基于return_typeWEEKDAYS()将返回不同的日期。
你需要的公式是

=SUMPRODUCT(--(WEEKDAY(DATE(2023,1,$C$5:$AG$5))=2)*(C6:AG6="A"))

尽管您没有要求这样做,但我还是想分享一下为什么使用SUMPRODUCT()是更好的选择。
假设您要计算A,它不仅福尔斯在星期一,而且出现在星期五。(* 我想到这个问题是因为在我工作的公司,如果员工在星期五或星期一未经批准休假,那么周末也会计算在内。*)
在这种情况下,不使用
=SUMPRODUCT(--(WEEKDAY(DATE(2023,1,$C$5:$AG$5))=6)*(C6:AG6="A")) + SUMPRODUCT(--(WEEKDAY(DATE(2023,1,$C$5:$AG$5))=2)*(C6:AG6="A")),则可以使用+ for OR条件来处理这两种情况。
=SUMPRODUCT(--((WEEKDAY(DATE(2023,1,$C$5:$AG$5))=2)+(WEEKDAY(DATE(2023,1,$C$5:$AG$5))=6))*(C6:AG6="A"))

ttvkxqim

ttvkxqim2#

实际上并不需要使用WEEKDAY,因为你计算的是星期一,而每个星期一都发生在值为W/O的星期日之后。

要获取输出的公式是数组公式(必须按Ctrl + Shift + Enter输入,否则无效):

=SUMPRODUCT(--(TRANSPOND(C3:AF3)&TRANSPOND(D3:AG3)="W/OA"))+IF(AND(H3&I3="W/OW/O",C3="A"),1,0)

IF部分只是检查月份是否从星期一开始,值为A。我们通过检查第六天和第七天是否是周末(值为W/O)来检查月份的第一天是否是星期一。
它是这样工作的:

  1. (TRANSPOND(C3:AF3)&TRANSPOND(D3:AG3)会将行转换为列并进行连接。请注意,第一个TRANSPOND排除了第31天,第二个TRANSPOND排除了第1天。这是因为星期一总是在星期天之后,所以我们检查了除第1天之外的所有日期。这将创建一个如下所示的数组(Employee5的可视化示例):

1.前面的公式被 Package 在Double Unary Operator中,Double Unary Operator将检查前面的数组是否有任何连接字符串等于W/OA。如果为真,将返回1,否则返回0。由于它是SUMPRODUCT,它将对所有值求和,在本例中将得到int输出5。

  1. IF部分,如前所述,用A值检查每月的第一天是否是星期一(记住我们在第1步中排除了第一天检查),因此必须这样做。将根据情况在以前的输出中添加1或0。检查第一张图片上的示例If the month starts on Monday, it works以更好地理解。
x0fgdtte

x0fgdtte3#

使用SUMPRODUCT()

=SUMPRODUCT(--(WEEKDAY($C$2:$AG$2)=2)*(C3:AG3="A"))

wmtdaxz3

wmtdaxz34#

所以这是你要考虑的,并显示如何确定星期一:

你可以考虑如何处理你的数据。

相关问题