鲍勃(Bob)想知道是否有一种简便的方法来确定特定日期的年份是否为a年,以便计算利息和复利天数。

我们都知道,如果一年可以被4整除,那么它就是is年,对吗?好吧,实际上,这是错误的。因此,不能简单地将年份数除以4,如下所示,以确定它是否是year年:

=IF(MOD(YEAR(A1), 4) = 0, "Leap", "Regular")

该公式将适用于本世纪(2000年到2099年)的所有日期,但是在该范围之外将无法可靠地起作用。原因是“四除”不是a年的唯一考验。如果年份是一个世纪年份(可以被100整除),那么只有被400可以整除,它才是a年。因此,2000年是a年,而2100年不是。

如果您想采用防弹的方式来确定日期是否在within年内发生,则您的公式需要更复杂:

=IF(OR(AND(MOD(YEAR(A1),4)=0,MOD(YEAR(A1),100)>0), MOD(YEAR(A1),400)=0),"Leap","Regular")

注意,这是一个公式。它在此处以两行显示,因此完全适合屏幕。该公式测试确定日期是否在a年内所需的所有三个条件。

当然,另一种方法是简单地确定给定年份中是否有2月29日。可以使用许多公式来完成此任务:

=IF(DAY(EOMONTH("1Jan"&YEAR(A1),1))=29, "Leap", "Regular")

=IF(MONTH(DATE(YEAR(A1),2,29))=2, "Leap", "Regular")

=IF(DAY(DATE(YEAR(A1),2,29))=29, "Leap", "Regular")

=IF(DAY(DATE(YEAR(A1),3,0))=29, "Leap", "Regular")

到目前为止,所描述的任何方法都可以在Excel支持的任何日期正常运行,但有一个例外。如果单元格A1中的日期是1900年,则使用DATE函数的用户(上面显示的最后三个)将不起作用。这些用户将始终返回1900年为a年,即使不是这样。 (有趣的是,在这一点上,EOMONTH函数与DATE函数没有相同的问题。)

如果需要使用Excel支持的日期之前的日期(1900年1月1日之前),则需要直接使用年份,而不是从Excel日期中提取年份。如果单元格A1仅包含一年,则三项检验公式的变化将很好地起作用:

=IF(OR(AND(MOD(A1,4)=0,MOD(A1,100)>0),MOD(A1,400)=0),"Leap","Regular")

您还可以创建一个用户定义的函数来测试日期。

无论单元格包含日期值还是文本的文本值,此方法都将很好地工作。 (如果您在单元格中输入了不受支持的日期值,例如1/1/1896,则Excel会将条目视为文本值,而不是尝试将其解析为日期。)下面的示例可以正确地使用受支持的所有日期VBA,范围是从100年到9999年:

Function IsLeap1(c As Range) As Boolean     YearNo = Year(c.Value)

If YearNo Mod 100 = 0 Then        IsLeap1 = ((YearNo \ 100) Mod 4 = 0)

Else        IsLeap1 = (YearNo Mod 4 = 0)

End If End Function

要在工作表中使用该功能,您需要输入如下公式:

=IF(IsLeap1(A1),"Leap", "Regular")

下面的单行宏通过使用技巧来弄清楚所讨论的年份中是否存在2月29日:

Function IsLeap2(c As Range)

IsLeap2 = IsDate("2/29/" & Year(c.Value))

End Function

在工作表中引用该宏的方式与上一个宏相同:

=IF(IsLeap2(A1),"Leap", "Regular")

如果需要更多创造性的方法来确定日期是否在a年中,请查看本文:

http://chandoo.org/wp/2012/02/29/check-leap-year-using-excel/

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9978)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。