Google sheets 第行中的CountIf日期为工作日

Google sheets 第行中的CountIf日期为工作日,google-sheets,countif,Google Sheets,Countif,好的,我想做的是每个月计算工作日数,减去公共假日 B2 -- the current year E2:E13 -- the first day of each month F2:F13 -- the amount of days (workday or otherwise) in that month, that year G2:G13 -- the amount of WORK days in that month (i.e. the formula I'm trying ot wri

好的,我想做的是每个月计算工作日数,减去公共假日

B2     -- the current year
E2:E13 -- the first day of each month
F2:F13 -- the amount of days (workday or otherwise) in that month, that year
G2:G13 -- the amount of WORK days in that month (i.e. the formula I'm trying ot write)
A8:A   -- the public holidays
我可以取下这些并创建一个公式(此处用于
G2

(它利用日期格式
dd.mm.yyyy

问题是,其中一些假期只有半天休息,而这个公式将给人们全天休息

因此,一种方法可以是,在那个月,每有被错误地算作全天休息的半天,再加上半天

假设我有

C8:C   -- is the holiday in the A cell of the same row a half-day?
这就把我们的公式变成了

=NETWORKDAYS(CONCATENATE("1.",MONTH(E2),".",$B$2),CONCATENATE(F2,".",MONTH(E2),".",$B$2), $A$8:A)+COUNTIFS($A$8:A,">"&EOMONTH(E2,-1),$A$8:A,"<"&EOMONTH(E2,0)+1,$C$8:C,TRUE)*0.5
不过,我不知道如何像那样引用这一行

简单的解决方法是使用一个helper列来计算布尔值,但这很难看,因为与“半天”列不同,我们不希望用户能够修改这些值,因此让他们看到该列只会混淆它们。)

如何在
countifs
中写入条件?

更新公式:

我想这应该可以。虽然可能还有其他的,甚至更整洁的方法

如果在筛选器()中找到匹配项,它将在半天内加回

=数组公式(网络日(E2,EOMONTH(E2,0),A$8:A$18)+IFERROR(过滤器(C$8:C$18,EOMONTH(A$8:A$18,0)=EOMONTH(E2,0),C$8:C$18,工作日(A8:A18,2更新公式:

我认为应该这样做。虽然可能有其他的,甚至是更整洁的方法

如果在筛选器()中找到匹配项,它将在半天内加回


=ARRAYFORMULA(NETWORKDAYS(E2,EOMONTH(E2,0),A$8:A$18)+IFERROR(FILTER)(C$8:C$18,EOMONTH(A$8:A$18,0)=EOMONTH(E2,0),C$8:C$18,WEEKDAY(A8:A18,2我找到了一个不使用
countifs
的简单解决方案。您要查找的结果是三个值之和:

  • 结果=一个月内的工作日-全休日-半休日*0.5
为此,我们将首先计算一个月的工作日,工作日减去全天假期,工作日减去半天假期

  • WD:
    =网络日(串联(“1.”,月(E5),“,$B$2”),串联(串联(F5,“,”,月(E5),“,$B$2))
  • WD_FULL_H:
    =网络天数(串联(“1.”,月(E5),“,$B$2),串联(F5,”,月(E5),“,$B$2),过滤器(A8:A,C8:C=FALSE))
  • WD_HALF_H:
    =网络天数(串联(“1.”,月(E5),“,$B$2),串联(F5,”,月(E5),“,$B$2),过滤器(A8:A,C8:C=TRUE))
通过这种方式,我们确保任何与公共假日重合的假期都不会改变最终结果。接下来,我们计算最后的工作日。为此,我们需要得到一个月有多少个全天和半天假期,我们通过减去该月的工作日数得到:

  • 最终WD:
    WD-(WD-WD\u FULL\u H)-(WD-WD\u HALF\u H)*0.5
简化:

  • 最终WD:
    WD\u FULL\u H-(WD-WD\u HALF\u H)*0.5
最后,在没有辅助计算的情况下:

  • 最终WD:

我找到了一个不使用
countifs
的简单解决方案。您要查找的结果是三个值的总和:

  • 结果=一个月内的工作日-全休日-半休日*0.5
为此,我们将首先计算一个月的工作日,工作日减去全天假期,工作日减去半天假期

  • WD:
    =网络日(串联(“1.”,月(E5),“,$B$2”),串联(串联(F5,“,”,月(E5),“,$B$2))
  • WD_FULL_H:
    =网络天数(串联(“1.”,月(E5),“,$B$2),串联(F5,”,月(E5),“,$B$2),过滤器(A8:A,C8:C=FALSE))
  • WD_HALF_H:
    =网络天数(串联(“1.”,月(E5),“,$B$2),串联(F5,”,月(E5),“,$B$2),过滤器(A8:A,C8:C=TRUE))
通过这种方式,我们确保任何与公共假日重合的假期都不会改变最终结果。接下来,我们计算最后的工作日。为此,我们需要得到一个月有多少个全天和半天假期,我们通过减去该月的工作日数得到:

  • 最终WD:
    WD-(WD-WD\u FULL\u H)-(WD-WD\u HALF\u H)*0.5
简化:

  • 最终WD:
    WD\u FULL\u H-(WD-WD\u HALF\u H)*0.5
最后,在没有辅助计算的情况下:

  • 最终WD:

请分享一个测试sheet@marikamitsos完成:)@MattKing是的,但这并不能解决我的问题,就像你读了问题一样,你会看到我不想要假期,我想要半个假期。;@User1291我意识到在我发布和删除后。在下面的帖子中回答请共享测试sheet@marikamitsos完成:)@马特金:是的,但这并不能解决我的问题,就像你读了这个问题,你会发现我不想要假期,我想要半个假期一样@User1291发布并删除后,我意识到。下面的线程中的答案最初发布了错误的公式。它已更新为包含工作日排除。最初发布了错误的公式。它已更新为包含工作日排除。一个右大括号对于WD来说太多了,但这是一个非常好的解决方案,谢谢。一个右大括号太大了纽约为WD,但这是一个非常好的解决方案,谢谢。
=NETWORKDAYS(CONCATENATE("1.",MONTH(E2),".",$B$2),CONCATENATE(F2,".",MONTH(E2),".",$B$2), $A$8:A)+COUNTIFS($A$8:A,">"&EOMONTH(E2,-1),$A$8:A,"<"&EOMONTH(E2,0)+1,$C$8:C,TRUE)*0.5
[...]+COUNTIFS([...], $A$8:A, NETWORKDAYS(ROW,ROW) > 0)*0.5
=ARRAYFORMULA(NETWORKDAYS(E2,EOMONTH(E2,0),A$8:A$18)+IFERROR(FILTER(C$8:C$18,EOMONTH(A$8:A$18,0)=EOMONTH(E2,0),C$8:C$18,WEEKDAY(A8:A18,2<6))/2))
=NETWORKDAYS(
CONCATENATE("1.",MONTH(E5),".",$B$2),
CONCATENATE(F5,".",MONTH(E5),".",$B$2), 
filter(A8:A,C8:C=FALSE)) 
-
(NETWORKDAYS(
CONCATENATE("1.",MONTH(E5),".",$B$2),
CONCATENATE(F5,".",MONTH(E5),".",$B$2))) 
-
NETWORKDAYS(
CONCATENATE("1.",MONTH(E5),".",$B$2),
CONCATENATE(F5,".",MONTH(E5),".",$B$2), 
filter(A8:A,C8:C=TRUE)))
*0.5