5

我想计算天数

  1. 从现在到年底(即 12 月 31 日)之间发生,并且
  2. 秋季在当月的第 15 日或最后一天(4 月、6 月、9 月、11 月为 30 日;1 月、3 月、5 月、7 月、8 月、10 月、12 月为 31 日;2 月 28 日)。

有没有办法做到这一点?

4

3 回答 3

6

这似乎可以工作(尽管我认为它可能会被整理,我相信有更好的方法......)

=(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 天

于 2012-08-08T00:43:29.973 回答
2

避免使用数组公式的变体。

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 日等的天数

这个公式将处理闰年

于 2012-08-08T00:45:10.747 回答
0

这应该在任何版本的 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}))
于 2012-08-08T01:06:08.697 回答