Я использовал следующую формулу, чтобы получить n-й день месяца:

=DATE(B2,A2,1+7*n)-WEEKDAY(DATE(B2,A2,8-xday))

где год - в В2, а месяц (как число от 1 до 12) - в А2, а где xday - это число, представляющее день недели (от 1 = воскресенье до 7 = суббота), поэтому для 1-й субботы это становится:

=DATE(B2,A2,1+7*1)-WEEKDAY(DATE(B2,A2,8-7))

Теперь это работает месяцами с 4 неделями. Как я могу изменить эту формулу для расчета, когда месяц имеет 5 недель?

2 ответа2

1

Как быстрое и уродливое решение, вы могли бы сказать,

=IF(MONTH(DATE($B$2,$A$2,1+7*n)-WEEKDAY(DATE($B$2,$A$2,8-xday))) = $A$2,
          DATE($B$2,$A$2,1+7*n)-WEEKDAY(DATE($B$2,$A$2,8-xday)),
          "Non-existent date")

Т.е., если дата, рассчитанная по вашей формуле, находится в правильном месяце, используйте ее.  Если вы переполнили первую неделю следующего месяца, не используйте его.

0

Попробуйте эту формулу

=(B2&"-"&A2&"-"&1+7*n-WEEKDAY(DATE(B2,A2,8-xday)))+0

По сути, это то же самое, что и ваш оригинал, за исключением того, что он создает дату в виде текстовой строки, например, для 5-го вторника в октябре 2012 года будет создана эта текстовая строка

2012-10-30

.... затем +0 в конце связывает эту строку с датой, 30 октября 2012 года. Но если нет 5-го дня, тогда созданная строка недопустима, например, для 5-й субботы октября вы получите 2012-10-34. Очевидно, что это недопустимая дата, поэтому, когда вы добавляете ноль, принуждение не работает, и вы получаете # ЗНАЧЕНИЕ! ошибка. Если вы предпочитаете текстовое сообщение, тогда просто используйте IFERROR, что-то вроде этого

=IFERROR((B2&"-"&A2&"-"&1+7*n-WEEKDAY(DATE(B2,A2,8-xday)))+0,"No 5th day")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .