Меня попросили попросить вообще не использовать VBA, поэтому я поиграл с некоторыми функциями Excel, и вот что я хотел бы, чтобы вы попробовали.
Я использовал ваши метаданные в следующих ячейках:

ВАРИАНТ 1 - легко
Введите следующую функцию Array в ячейку D1 (Ctrl + Shift + Enter) и перетащите ее полностью вправо (например, до ячейки AW1):
=IF(AND(ISNUMBER(MATCH(WEEKDAY($B$1+COLUMN()-4,2),--($B$3:$B$7="y")*(ROW($B$3:$B$7)-2),0)),($B$1+COLUMN()-4)<=$B$2),$B$1+COLUMN()-4,"")
Отображаются все даты, которые находятся между датами начала и окончания и для требуемых дней недели. Однако этот параметр не устраняет пробелы, поэтому между ними будет много пустых столбцов.
ВАРИАНТ 2 - завершено
Введите следующую функцию Array в ячейку D2 (Ctrl + Shift + Enter) и перетащите ее вправо:
=IFERROR(SUMPRODUCT(SMALL(($B$1+ROW($B$1:$B$30)-1)*(IF(ISNUMBER(MATCH(WEEKDAY($B$1+ROW($B$1:$B$30)-1,2),(--($B$3:$B$7="y")*(ROW($B$3:$B$7)-2)),0)),1,0)),30-COUNT(MATCH(WEEKDAY($B$1+ROW($B$1:$B$30)-1,2),(--($B$3:$B$7="y")*(ROW($B$3:$B$7)-2)),0))+COLUMN()-3)),"")
Как видите, эта опция отображает все "правильные" даты рядом друг с другом, без пробелов.
Надеюсь, вы найдете это полезным - мне было очень весело поиграть со вторым вариантом, и я уверен, что его еще можно улучшить.
Береги себя,
Юстина