如何编写Excel公式以比较年初至今和之前的年份。还算闰年?

时间:2016-06-06 20:49:51

标签: excel excel-formula leap-year

我正在尝试比较截至今日4年的同一天和当月(例如2016年6月6日,2015年,2014年等)的措施。 对于每一年,我决定计算自年初以来的天数,并将我的价值加到每年的天数中。

为了确定日期是否应该包括在年初至今的比较中,我使用了我的日期在单元格A1中的公式:

=IF((A1-DATE(YEAR(A1),1,1)+1)<=(TODAY()-DATE(YEAR(TODAY()),1,1)+1),1,0)

我正在寻找解决闰年增加的额外日子问题的方法。换句话说,在2月28日之后,在闰年中,日计数将总是减少一个,并且在非闰年中尝试使用第29个月将返回错误。

我想调整这个公式,但我愿意使用不同的功能&amp;公式,如果它得到我正确的结果。

2 个答案:

答案 0 :(得分:0)

假设这样的表结构:

A:Date     | B:Value
----------------------
01/01/2016 | 0
01/01/2015 | 1
01/01/2014 | 2
01/01/2013 | 3
01/01/2012 | 4

To - 例如 - 计算1月1日(今天是2016年1月1日)前四年(不包括当前年)的平均值:

=SUMPRODUCT(
  (MONTH(A:A)=MONTH(compare))*
  (DAY(A:A)=DAY(compare))*
  (YEAR(A:A)>YEAR(compare)-5)*
  (YEAR(A:A)<YEAR(compare))*
  (B:B)
 ) / (
   SUMPRODUCT(
     (MONTH(A:A)=MONTH(compare))*
     (DAY(A:A)=DAY(compare))*
     (YEAR(A:A)>YEAR(compare)-5)*
     (YEAR(A:A)<YEAR(compare))*
     1
   )
 )

结果

对于上面的例子,结果是2.5

解释

仅选择代表相同月份和日期的行:

(MONTH(A:A)=MONTH(compare))*(DAY(A:A)=DAY(compare))

仅选择前4年的值(不包括当前值):

(YEAR(A:A)>YEAR(compare)-5)*(YEAR(A:A)<YEAR(compare))*

我们感兴趣的实际值:

(B:B)

过去四年的平均值除以4。这假设没有丢失的数据可能是一个问题。您可以使用另一个SUMPRODUCT(将B:B替换为1)来计算结果行数并除以该数字来处理这种情况。这似乎相当慢,但它确实有效。

注意

出于性能原因,您不应在公式中使用A:A(完整列),只需使用您需要的实际范围,这可能会更快。

答案 1 :(得分:0)

您可以查看2月29日的任何信息。如果发生错误,您就知道它没有闰年。使用=IFERROR(;)抓住该错误。