2015-04-28 75 views
1

如何計算兩個日期之間使用的年份是否爲閏年。在兩個日期之間查找是否存在閏年的公式

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

因此,如果我們計算結果應該是「閏年」,但如果我們使用Date2 = 02/01/2016那麼結果將是「無閏年」。

所以,如果date2穿過02/29/16那麼只有它給出結果「閏年」否則不會。

謝謝!

+0

這有可能是Excel的創造者(無論他們是誰)已經回答這一個。 – Strawberry

+0

@Strawberry - Excel認爲1900年2月29日是一個有效的日期,所以我不會猜測(舊的迴歸Lotus兼容性)。 – Jeeped

回答

0

如果date2的是跨越16年2月29日則只有它給結果 「閏年」

如果Date1是在A1和A2中Date2請嘗試:

=IF(AND(A1<DATE(2016,2,29),A2>DATE(2016,2,29)),"Leap Year","No Leap Year") 
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窗口

如果保存工作簿,UDF將隨之保存。 如果您在2003年以後使用的是Excel版本,則必須將該文件保存爲.xlsm而非 。XLSX

要刪除UDF:

  1. 彈出VBE窗口如上
  2. 清晰的代碼進行
  3. 關閉VBE窗口

從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

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 

原樣返回真/假,但你當然可以修改它返回一個明確的結果或格式化輸出。

1

這個公式將從1900年3月1日工作,通過11月24日4770

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

它查找日期1和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 
+0

智能首發於1900年3月1日! – Jeeped

+0

非常感謝Ron的回答。它真的非常好,沒有錯誤。 – Sumeet

+0

@Sumeet很高興幫助。由於它對你的工作很好,如果你能將我的回答標記爲答案,我將不勝感激。謝謝。 –

0

有一個閏年至少每8年一次,所以應該足以在未來8年內,尋找下一個leap dayDate1後,看看這一天的日期範圍內

這個公式會做

=IF(B2>=EOMONTH(A2,MATCH(29,INDEX(DAY(EOMONTH(A2,ROW(INDIRECT("1:96"))-1)),0),0)-1),"Leap Year","No Leap Year")

其中A2包含Date1B2包含Date2

這個公式應該爲工作[近]在Excel任何有效的日期範圍 - 它甚至承認1900是不是閏年

相關問題