在两个日期之间找到闰年之间的公式

时间:2015-04-28 13:24:59

标签: excel

如何计算2个日期之间使用的年份是否为闰年。

示例:如果Date1 = 02/02/2015和Date2 = 03/01/2016。

所以,如果我们计算那么结果应该是"闰年"但是如果我们使用Date2 = 02/01/2016那么结果将是"没有闰年"。

所以,如果date2越过02/29/16那么只有它给出了结果"闰年"否则没有。

谢谢!

5 个答案:

答案 0 :(得分:1)

循环间隔的每个日期可能有点苛刻。 此功能每年只会循环播放:

Public Function DatesOfLeapYear(ByVal Date1 As Date, ByVal Date2 As Date) As Boolean

    Dim LeapYear            As Boolean

    Do
        If DateDiff("d", Date1, DateSerial(Year(Date1), 3, 1)) > 0 Then
            If Day(DateSerial(Year(Date1), 2, 29)) = 29 Then
                LeapYear = True
                Exit Do
            End If
        End If
        Date1 = DateAdd("yyyy", 1, Date1)
    Loop Until Date1 >= Date2

    DatesOfLeapYear = LeapYear

End Function

它按原样返回True / False,但您当然可以修改它以返回显式结果或格式化输出。

答案 1 :(得分:1)

此公式将于1900年3月1日至4770年11月24日之间运作

=IF(SUMPRODUCT((DAY(ROW(INDIRECT(Date1&":"&Date2)))=29)*(MONTH(ROW(INDIRECT(Date1&":"&Date2)))=2)),"Leap Year","No Leap Year")

它寻找在Date1和Date2之间存在2月29日。

VBA例程不具有这些日期限制。以下检查是否从Date1到Date2的任何年份是闰年;如果是,如果该日期在date1和date2之间。这将返回TRUEFALSE,您可以在IF函数中使用它来返回您想要的内容。

Option Explicit
Function IsLeapYear(DT1 As Date, DT2 As Date) As Boolean
    Dim I As Long
    Dim DT As Date

For I = Year(DT1) To Year(DT2)
    DT = DateSerial(I, 2, 29)
    If Day(DT) = 29 And _
        DT >= DT1 And _
        DT <= DT2 Then
            IsLeapYear = True
            Exit Function
    End If
Next I

End Function

答案 2 :(得分:0)

  

如果date2越过02/29/16那么只有它给出结果&#34;闰年&#34;

如果Date1位于A1,Date2位于A2,请尝试:

=IF(AND(A1<DATE(2016,2,29),A2>DATE(2016,2,29)),"Leap Year","No Leap Year")

答案 3 :(得分:0)

尝试以下小型用户定义函数:

Public Function LeapTest(d1 As Date, d2 As Date) As String
    Dim dEarly As Date, dLate As Date
    Dim wf As WorksheetFunction, yr As Long
    Set wf = Application.WorksheetFunction
    Dim d As Date

    dEarly = wf.Min(d1, d2)
    dLate = wf.Max(d1, d2)
    yr = Year(dEarly)
    For d = dEarly To dLate
        If Format(d, "mm/dd") = "02/29" Then
            LeapTest = "Leap Year"
            Exit Function
        End If
    Next d
    LeapTest = "Not Leap Year"
End Function

它只是走过日期范围寻找2月29日。

用户定义函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      = LeapTest(A1,B1)

      要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      有关UDF的详细信息,请参阅:

      http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

      必须启用宏才能使其生效!

      示例:

      enter image description here

答案 4 :(得分:0)

闰年至少每8年一次,所以在leap day之后或之后的Date1下一年=IF(B2>=EOMONTH(A2,MATCH(29,INDEX(DAY(EOMONTH(A2,ROW(INDIRECT("1:96"))-1)),0),0)-1),"Leap Year","No Leap Year")查看该日期是否足够范围

这个公式会做到这一点

A2

Date1包含B2Date2包含Excel

该公式应该适用于[{1}}中的[几乎]任何有效日期范围 - 它甚至会认识到1900不是闰年