For the last part, does the last day of the month fall on a weekend,
If Weekday(DateSerial(Y, M + 1, 0), vbMonday) > 5 Then
I don't understand "date key 5th Sunday".
If you mean you want to know if a given date is the 5th Sunday in a month, the
5th occurrence of any day of the week must be on or after the 29th, so given
that TheDate contains the date
If (Weekday(TheDate) = vbSunday) and (Day(TheDate) > 28) Then
'it's the 5th Sunday
If, given a date, you want to know which occurrence of that weekday it is
WhichOne = (Day(TheDate)-1) \ 7 + 1
WhichOne will be a number between 1 and 5.