Вы когда-нибудь задумывались, сколько дней недели приходится на определенный месяц? Некоторым людям важно знать, сколько вторников в месяц. И кто не хочет знать, будет ли в конкретном месяце четыре или пять суббот?
Excel не включает встроенную функцию, которую можно использовать для определения количества раз, когда конкретный будний день встречается в течение данный месяц. Однако вы можете создавать свои собственные формулы и функции для выполнения этой задачи.
Сначала рассмотрим следующую формулу.
= 4 + N ((WEEKDAY (DATE (ГОД (1 доллар США), МЕСЯЦ (1 доллар США), 1))) + (ДЕНЬ (ДАТА (ГОД (1 доллар США), МЕСЯЦ (1 доллар США) +1,0)) — 28)> (7 * ((WEEKDAY (DATE (ГОД ($ A $ 1), МЕСЯЦ ($ A $ 1), 1)))> (1 + ROW () — ROW ($ A $ 2))) + (1 + ROW () — ROW ($ A $ 2))))
Формула основана на дате в A1. Эта дата должна быть в том месяце, который вы хотите «протестировать». Формула должна быть скопирована в ячейку в строке 2, а затем скопирована в шесть ячеек непосредственно под ней. Например, вы можете скопировать эту формулу в диапазон ячеек B2: B8. Первый ответ (B2) – это количество воскресений в месяце, второй (B3) – количество понедельников и т. Д.
Недостатком этой формулы является то, что она использует позицию ячейки, содержащей формулу как часть формулы. Это означает, что формулу нужно поместить где-нибудь в начале второй строки.
Еще один недостаток – формула довольно длинная и сложная. Если вам нужна более короткая формула, вам нужно обратиться к формуле массива. Одна удобная формула, которую вы можете использовать, предполагает, что вы указываете три аргумента: год (ячейка C2), месяц (ячейка D2) и день недели (ячейка E2). С этими тремя элементами отлично работает следующая формула:
= SUM (IF (WEEKDAY (DATE (C2, D2, ROW (INDIRECT («1:» & DAY (DATE (C2, D2 + 1 , 0)))))) = E2, 1, 0))
Помните, что это формула массива, а это значит, что вы должны ввести ее, нажав Shift + Ctrl + Enter . Кроме того, значение дня недели, которое вы вводите в ячейку E2, должно находиться в диапазоне от 1 до 7, где 1 – воскресенье, 2 – понедельник и т. Д.
Другой подход – не полагающийся на формула массива – проверка даты в ячейке A1 для любого желаемого дня недели, как указано в E2. (Снова значение от 1 до 7, как в предыдущем примере.)
= IF (MONTH (DATE (YEAR (A1), MONTH (A1), 1) -WEEKDAY (DATE ( ГОД (A1), МЕСЯЦ (A1), 1) -E2) +35) = МЕСЯЦ (A1), 5,4)
Формула в основном проверяет, есть ли пятый экземпляр в месяц любого дня недели, который вы проверяете. Если есть, то возвращается значение 5; в противном случае возвращается значение 4. (Формула справедливо предполагает, что может быть только 4 или 5 экземпляров любого дня недели – ни меньше, ни больше.)
Также доступны решения на основе макросов. Вот одно из таких решений:
Функция MonthWeekDays (dDate As Date, iWeekDay As Integer) Dim dLoop As Date If iWeekDay 7 Then MonthWeekDays = CVErr (xlErrNum) Завершение функции выхода, если MonthWeekDays = 0 dLoop = DateSerial (Year (dDate), Month (dDate), 1) Do While Month (dLoop) = Month (dDate) Если WeekDay (dLoop) = iWeekDay, то _ MonthWeekDays = MonthWeekDays + 1 dLoop = dLoop + 1 функция LoopEnd
Вы используете функцию, вводя в ячейку следующее:
= MonthWeekDays (A1,4)
В этом случае Первый аргумент (ячейка A1) содержит дату оцениваемого месяца. Второй аргумент – это числовое значение, представляющее день недели, который вы хотите подсчитать. Это значение должно быть в диапазоне от 1 до 7, где 1 – воскресенье, 2 – понедельник и т. Д.
Источник: