计算每年的工作日

我想计算一下天数

  1. 从现在到年底(即12月31日),以及
  2. 那个月的十五号或最后一天(四月,六月,九月,十一月的第三十,一月,三月,五月,七月,八月,十月,十二月的第三十一天,二月二十八日)。

有没有办法做到这一点?

这似乎是可能的(虽然我认为这可能会被整理,我相信有一个更好的办法…)

=(12-MONTH(TODAY()))*2 + IF(DAY(TODAY())<15,2, IF(DAY(TODAY())<DAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1)-1),1,0)) 

(12个月(今日()))* 2:每个完整的剩余月份两天

如果在15日之前加2天

要么

如果15号或更晚,而不是当前的最后一天,则加1天

避免数组公式的变体。

1. For your question as asked

=SUMPRODUCT(--(DAY(DATE(YEAR(NOW()),MONTH(NOW()),DAY(NOW()))+ROW(INDIRECT("1:"&DATE(YEAR(NOW()),12,31)-TODAY()+1)))={15}))+(13-MONTH(TODAY()))
= 10

2. For my initial interpretation which was to count any days corresponding to a certain day of the month

=SUMPRODUCT(--(DAY(DATE(YEAR(NOW()),MONTH(NOW()),DAY(NOW()))+ROW(INDIRECT("1:"&DATE(YEAR(NOW()),12,31)-TODAY()+1)))={15,30}))
= 10

=SUMPRODUCT(--(DAY(DATE(YEAR(NOW()),MONTH(NOW()),DAY(NOW()))+ROW(INDIRECT("1:"&DATE(YEAR(NOW()),12,31)-TODAY()+1)))={15,31}))
= 8

=SUMPRODUCT(--(DAY(DATE(YEAR(NOW()),MONTH(NOW()),DAY(NOW()))+ROW(INDIRECT("1:"&DATE(YEAR(NOW()),12,31)-TODAY()+1)))={15,30,31}))
= 13

要改变所需的天数,只需改变{15,30}分量即= {1,2,12,15,31}来计算第一,第二,第十二,第十五和第三十一等所有天数

这个公式将会处理闰年

这应该在任何版本的Excel中任何一年的任何一天工作,直到2078年(在Excel 2007或更高版本中更长)。

 =SUM(IF(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16},1,0)) 

注意我在1天的偏移量上检查day = 1或16(这个想法是为了避免在不同的DAY()值)。

{Array公式…按Ctrl+Shift+Enter提交}

[附录]

如果你不想包括当天(比如今天是8月15日),那就用这个代替:

 =SUM(IF(DAY(ROW(OFFSET($A$1,TODAY()+1,0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16},1,0)) 

Ps我testing了从今天到2016年的所有date以及之后的所有date,它是一种享受。 所有这一切都是由DAY()函数将testing行号视为date序列,以查看它们是1还是16,但是序列被+1偏移,因此它真的检查DAY()是否为[无论月份]还是15.如果结果为真,则加1,否则加0。


[更多增编]

这里是非数组版本,否则以相同的方式工作:

包括当天:

 =SUMPRODUCT(N(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16})) 

不包括当天

 =SUMPRODUCT(N(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16}))