A lambda to calculate the date of Easter for any year from 1900 (Excel's earliest year) to 2400 as celebrated by the Western churches, both Roman Catholic and Protestant.

Development Rationale

The purpose in developing this lambda is to simplify the derivation of the date of Easter for any given year from 1900 to 2400.  A minor adjustment to the formula may be required after 2400, but for now, I think that is far enough away that it is not something to worry about now.

About the Lambda Calculation

The process of calculating the the date of Easter Sunday in both the Western and Orthodox Christian churches is complex, based as it is on the Paschal Full Moon, which is the first full moon after the Spring Equinox.  I have implemented a modified version of Gauss' method for calculating Easter for the Orthodox Church, which calculates the Julian date and then adjusts to the Gregorian calendar so it is useful in normal business.

The calculations are somewhat dense, but attempt to adjust for the the cycles in the lunar calendar which has a lunar year of 13 months of 28 days ~ 364 days, a solar cycle of 365.25 days, and to calculate the date of the first Sunday after the Paschal Full Moon following the Spring Equinox (northern hemisphere).

Since we have quite a few extra steps to traverse, we would be wise to use a LET function to streamline things, and make the layout easier and to avoid lots of deep nesting and redundancy.  It''s going to be hard enough as it is!

Here, I will layout the workings using line wrapping, so each step of the LET function can be read and analysed:

1   =LAMBDA(forYear,
2   LET(useYear,IFS(NOT(ISNUMBER(forYear)),#VALUE!,forYear<1900,#VALUE!,forYear>2400,#VALUE!,TRUE,forYear),
3   memC,TRUNC(useYear/100),
4   memG,MOD(useYear,19),
5   memH,MOD(memC-TRUNC(memC/4)-TRUNC((memC)/3)+19*memG+15,30),
6   memI,memH-TRUNC(memH/28)*TRUNC(29/(memH+1))*TRUNC((21-memG)/11),
7   memJ,MOD(useYear+TRUNC(useYear/4)+memI+2-memC+TRUNC(memC/4),7),
8   easterM,3+TRUNC((memI-memJ+40)/44),
9   easterD,memI-memJ+28-31*TRUNC(easterM/4),
10 DATE(useYear,easterM,easterD)))

In line 1 above, the lambda is defined, with one argument capitalised as is usual for Excel functions: for_yearfor_year is expected to be a number in the range 1900..2400,

In line 2, the LET function in the third argument of the LAMBDA encases the step-by-step calculation of the required result.  Initially, a local value called useYear is derived.  If the value of for_year is not a number, or is a number < 1900 or a number > 2400. the value of useYear is set to #VALUE!, otherwise it is set to the value of for_year.  This ensures that if an invalid year is provided, the #VALUE! error is returned.  It would be possible instead to set the value of useYear to the current year, using YEAR(TODAY()), but that leaves the user with the risk that a year other than the one previously calculated is used when the workbook is opened later in time.  For this reason we chose to return an error to ensure that the problem is fixed up front.

In line 3, the local value memC calculates the century in which the year falls, which is used in the calculation of Easter date in the following formulas..

In line 4, the local value memG calculates the 'Golden' number related to the place in the 19-year cycle of lunar phases in which the year falls.  MOD returns the modulo, or remainder of division.

In lines 5 to 7, the local values memH, memI and memJ are calculated, as intermediate values to derive the Easter date, working the cycles of the lunar calendar.

In line 8, the local value easterM is assigned the value that calculates the month in which Easter Sunday falls.

In line 9, the local value easterD is assigned the result of calculating the day on which Easter Sunday falls.

Finally, in line 10, the return value of the LET function, which is the result returned by the LAMBDA is the date calculated using the useYear, easterM, and easterD passed to a DATE function to derive the Excel Serial Date for Orthodox Easter in the given year.

Defined Name Settings

To create the lambda, simply use the define name1 feature in Excel to define this named lambda in the workbook where it will be used.  The required settings are shown below and may simply be copied from here and pasted into the Define Name dialog box.

Name:2 λEasterWestern
Scope: Workbook
Comment: A lambda that returns the date of Easter Sunday as celebrated by the Roman and Protestant churches. Returns #VALUE! error if year is not in range required.
Refers To: =LAMBDA(forYear, LET(useYear,IFS(NOT(ISNUMBER(forYear)),#VALUE!,forYear<1900,#VALUE!,forYear>2400,#VALUE!,TRUE,forYear), memC,TRUNC(useYear/100), memG,MOD(useYear,19), memH,MOD(memC-TRUNC(memC/4)-TRUNC((memC)/3)+19*memG+15,30), memI,memH-TRUNC(memH/28)*TRUNC(29/(memH+1))*TRUNC((21-memG)/11), memJ,MOD(useYear+TRUNC(useYear/4)+memI+2-memC+TRUNC(memC/4),7), easterM,3+TRUNC((memI-memJ+40)/44), easterD,memI-memJ+28-31*TRUNC(easterM/4), DATE(useYear,easterM,easterD)))
Syntax of λEasterWestern

=λEasterWestern(forYear)

where:
   forYear is a reference to a range, a nested expression that returns a value or array of values,or a constant value or array of constants that is the year in the range 1900 to 2400 for which the Easter Sunday date is to be calculated.

Sample File

An example file, showing the definition and use of this lambda is available here: Public Lambda Samples.xlsx.

Version History
 Version Release Date Release Notes
1.0 16/02/2024 Initial release named cllib.Easter - calculated both orthodox and western Easter dates
2.0 31/08/2025 New λEasterWestern created as part of reorganisation of the λ Library 2.0.
Modified argument names to match standard Excel lower case with underscore.
Simplified by creating separate λEasterOrthodox and λEasterWestern functions.
     

1 Ctrl+Alt+F3 is the keyboard shortcut to open the New Name dialog, or you can select Formulas » Define Name.

2  You may change the name of the lambda and drop the prefix.  The prefix ensures there is no clash with functions that may be added by Microsoft later or with lambdas from another source.  The names given here also tie-in to the GitHub sources for these functions from the Clarkson ITT LAMBDA Library which can be downloaded using the Advanced Formula Environment.