我如何编写一个Excel公式来比较年初至前几年,还要考虑闰年?

我试图比较截至今天为止的前四年(例如2016年,2015年,2014年6月6日等)的相同date和月份。 我决定每年计算一年以来的天数,并将每年的天数总和。

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

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

我正在寻找解决闰年多余的问题的方法。 换句话说,2月28日以后,闰年的日数总是偏离1,而在非闰年尝试使用29日的剔除将会返回错误。

我想调整这个公式,但我打算使用不同的函数和公式,如果它得到正确的结果。

你可以查看关于二月二十九日的任何信息。 如果发生错误,你知道它没有闰年。 用=IFERROR(;)捕获该错误。

假设这样的表结构:

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

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

 =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

说明

要仅select代表相同月份和date的那些行:

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

只select过去4年的数据(不包括当前数据):

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

我们感兴趣的实际值:

 (B:B) 

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

注意

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