我想计算天数
- 从现在到年底(即 12 月 31 日)之间发生,并且
- 秋季在当月的第 15 日或最后一天(4 月、6 月、9 月、11 月为 30 日;1 月、3 月、5 月、7 月、8 月、10 月、12 月为 31 日;2 月 28 日)。
有没有办法做到这一点?
我想计算天数
有没有办法做到这一点?
这似乎可以工作(尽管我认为它可能会被整理,我相信有更好的方法......)
=(12-MONTH(TODAY()))*2
+ IF(DAY(TODAY())<15,2,
IF(DAY(TODAY())<DAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1)-1),1,0))
(12-MONTH(TODAY()))*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} 以计算所有落在 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()
值)。
{数组公式...按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 我从今天到 2016 年闰日及以后的所有日期都进行了测试,它很有效。所有这些都是测试被函数视为日期序列的行号,DAY()
以查看它们是 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}))