|
|||||||||
These pages are no longer updated and are only available for archive purposes.Click here to visit the pages with updated information. Easter SundayIf you want to calculate the correct date for Easter Sunday between the years 1900 and 2078 without depending on any Excel built-in worksheet functions you can use the function below: Function EasterSunday(InputYear As Integer) As Long
' Returns the date for Easter Sunday, does not depend on Excel
Dim d As Integer
d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21
EasterSunday = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - _
((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7)
End Function
When you have this date you are also able to calculate other variable dates regarding Easter etc. Calculate the date for Easter Sunday with a worksheet formula Hans W. Herber held a competition on his website http://www.herber.de to find the shortest worksheetfunction that could calculate the date for Easter Sunday between the years 1900 and 2078. The competition ended March 31st. 1999. The example formulas below assumes that cell A1 contains the year the formula uses to return the date for Easter Sunday. The winning formula (in English): You could translate this worksheet function into a user defined function like this: Function FDOE(InputYear As Integer) As Long
' Returns the date for Easter Sunday, depends on Excel to function
' From a worksheet formula by Norbert Hetterich
FDOE = DateSerial(InputYear, 5, Day(Minute(InputYear / 38) / 2 + 56))
FDOE = Application.WorksheetFunction.Floor(FDOE, 7) - 34
End Function
Note! The userdefined function above calculates the wrong date for the years 1943, 1957, 1984, 2011, 2038 and 2052. If you translate the winning formula to Norwegian, this is the result: The first runner up is this formula (in English): The first runner up formula translates better to Norwegian: Calculate holidaysThe function below will return True if the input date is a defined holiday. The function can include or exclude Saturdays and Sundays. You'll have to customize the function to include the specific holidays for your country. This function uses the function EasterSunday found above in this document. Function IsHoliday(lngDate As Long, InclSaturdays As Boolean, _
InclSundays As Boolean) As Boolean
' returns True if lngDate is a Norwegian holiday
' (optionally included Saturdays/Sundays)
' benytter funksjonen EasterSunday
Dim InputYear As Integer, ES As Long, OK As Boolean
If lngDate <= 0 Then lngDate = Date
InputYear = Year(lngDate)
ES = EasterSunday(InputYear)
OK = True
Select Case lngDate
Case DateSerial(InputYear, 1, 1) ' 1. Nyttårsdag
'Case ES - 4 ' Onsdag før påske
Case ES - 3 ' Skjærtorsdag
Case ES - 2 ' Langfredag
Case ES ' 1. Påskedag
Case ES + 1 ' 2. Påskedag
Case DateSerial(InputYear, 5, 1) ' 1. mai
Case DateSerial(InputYear, 5, 17) ' 17. mai
Case ES + 39 ' Kristi Himmelfartsdag
'Case ES + 48 ' Pinseaften
Case ES + 49 ' 1. Pinsedag
Case ES + 50 ' 2. Pinsedag
'Case DateSerial(InputYear, 12, 24) ' Julaften
Case DateSerial(InputYear, 12, 25) ' 1. Juledag
Case DateSerial(InputYear, 12, 26) ' 2. Juledag
'Case DateSerial(InputYear, 12, 31) ' Nyttårsaften
Case Else
OK = False
If InclSaturdays Then
If WeekDay(lngDate, vbMonday) = 6 Then
OK = True
End If
End If
If InclSundays Then
If WeekDay(lngDate, vbMonday) = 7 Then
OK = True
End If
End If
End Select
IsHoliday = OK
End Function
Document last updated 2001-03-14 12:44:38 Printerfriendly version
|
|||||||||
|
|||||||||