Summary

To get the last weekday in a month (i.e. the last Saturday, the last Friday, the last Monday, etc) you can use a formula based on the EOMONTH and WEEKDAY functions.

In the example shown, the formula in D5 is:

=EOMONTH(B5,0)+1-WEEKDAY(EOMONTH(B5,0)+1-C5)

Generic formula

=EOMONTH(date,0)+1-WEEKDAY(EOMONTH(date,0)+1-dow)

Explanation 

First, this formula determines the first day of the next month *after* a given date. It does this my using EOMONTH to get the last day of the month, then adding one day:

=EOMONTH(B5,0)+1

Next, the formula calculates the number of days required to "roll back" to the last requested weekday in the month prior (i.e. the month of the original date):

WEEKDAY(EOMONTH(B5,0)+1-C5)

Inside WEEKDAY, EOMONTH is again used to get the first day of the next month. From this date, the value for day of week is subtracted, and the result is fed into WEEKDAY, which returns the number of days to roll back.

Last, the roll back days are subtracted from the first day of the next month, which yields the final result.

Other weekdays

In the general form of the formula at the top of the page, day of week is abbreviated "dow". This is a number between 1 (Sunday) and 7 (Saturday) which can be changed to get a different day of week. For example, to get the last Thursday of a month, set dow to 5.

Note: I ran into this formula in an answer on the MrExcel forum by Barry Houdini.

Dave Bruns Profile Picture

AuthorMicrosoft Most Valuable Professional Award

Dave Bruns

Hi - I'm Dave Bruns, and I run Exceljet with my wife, Lisa. Our goal is to help you work faster in Excel. We create short videos, and clear examples of formulas, functions, pivot tables, conditional formatting, and charts.