计算每年的工作日
我想计算一下天数
- 从现在到年底(即12月31日),以及
- 那个月的十五号或最后一天(四月,六月,九月,十一月的第三十,一月,三月,五月,七月,八月,十月,十二月的第三十一天,二月二十八日)。
有没有办法做到这一点?
这似乎是可能的(虽然我认为这可能会被整理,我相信有一个更好的办法…)
=(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}))