
Общая формула
=EOMONTH(date,0)+1-WEEKDAY(EOMONTH(date,0)+1-dow)
Резюме
Чтобы получить последний день недели в месяце (т.е. последнюю субботу, последнюю пятницу, последний понедельник и т. Д.), Вы можете использовать формулу, основанную на функциях EOMONTH и WEEKDAY.
В показанном примере формула в D5:
=EOMONTH(B5,0)+1-WEEKDAY(EOMONTH(B5,0)+1-C5)
Объяснение
Во-первых, эта формула определяет первый день следующего месяца * после * заданной даты. Я использую EOMONTH, чтобы получить последний день месяца, а затем добавляю один день:
=EOMONTH(B5,0)+1
Затем формула вычисляет количество дней, необходимое для «отката» до последнего запрошенного дня недели в предыдущем месяце (то есть в месяце исходной даты):
WEEKDAY(EOMONTH(B5,0)+1-C5)
Внутри WEEKDAY EOMONTH снова используется для получения первого дня следующего месяца. Начиная с этой даты, значение дня недели вычитается, а результат передается в WEEKDAY, который возвращает количество дней для отката.
Наконец, дни отката вычитаются из первого дня следующего месяца, что дает окончательный результат.
Другие будни
В общей форме формулы вверху страницы день недели обозначается аббревиатурой «доу». Это число от 1 (воскресенье) до 7 (суббота), которое можно изменить, чтобы получить другой день недели. Например, чтобы получить последний четверг месяца, установите значение до 5.
Примечание: я столкнулся с этой формулой в ответе Барри Гудини на форуме MrExcel.