  The Nextworkday(date, optional holidays) function returns the date for the next workday.
The first parameter is the starting date you set manually.
The second parameter is optional and points to a range with dates you want to exclude from the workdays list, like easter or your vacation.
If you omit the second parameter, only Saturdays and Sundays are excluded from the list.

#### Function EasterDate

The EasterDate calculates the 1st date of easter for the year you send as parameter, and helps set up the holiday list.

#### Function EasterDate code

``````'Find 1st day of easter
Public Function EasterDate(Yr As Integer) As Date

Dim x As Integer
x = (((255 - 11 * (Yr Mod 19)) - 21) Mod 30) + 21
EasterDate = DateSerial(Yr, 3, 1) + x + (x > 48) + 6 - ((Yr + Yr \ 4 + x + (x > 48) + 1) Mod 7)

End Function``````

Usage of the EasterDate function in a worksheet formula

#### Function NextWorkDay code

``````
Function NextWorkday(ThisDate As Date, Optional rngHolidays As Range) As Date

Dim x As Long
Dim y As Long
Dim DayNum As Long
Dim NextDate As Date
Dim Found As Boolean
Dim NotDate As Long

With rngHolidays

'Week starts on Sunday
x = 0
Do
x = x + 1

'Check next date
NextDate = ThisDate + x

'Find day of week
DayNum = Weekday(NextDate, vbSunday)

'Reset not date counter
NotDate = 0

'Reset found flag
Found = False

'Ignore holiday check if parameter is omitted
If Not rngHolidays Is Nothing Then

'Start on first row in range
y = 1
While Found = False And y <= .Rows.Count And NotDate < 10

'Check if date
If IsDate(.Cells(y, 1)) Then

'Reset not date counter every time a date is found
NotDate = 0

'Date present in holiday's list?
If DateValue(.Cells(y, 1)) = NextDate Then
Found = True
End If

Else

'This row wasn't a date
NotDate = NotDate + 1

End If

y = y + 1
Wend

End If

'Loop if sat, sun or found in holiday list
Loop Until (DayNum <> 7 And DayNum <> 1) And Found = False

End With

NextWorkday = NextDate

End Function

``````

Usage of the NextWorkDay function in a worksheet formula: