Вы когда-нибудь задумывались, сколько дней в определенный будний день приходится на месяц?

Некоторым людям важно знать, сколько вторников в месяц. И кто не хочет знать, будет ли в конкретном месяце четыре или пять суббот?

В Excel нет встроенной функции, которую можно использовать для определения количества раз, когда определенный будний день встречается в течение данного месяца. Однако вы можете создавать свои собственные формулы и функции для выполнения этой задачи.

Сначала рассмотрим следующую формулу.

=4+N((WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1)))



(DAY(DATE(YEAR($A$1),MONTH($A$1)+1,0))-28)>(7*(( WEEKDAY(DATE(YEAR($A$1),MONTH($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(YEAR(A1),MONTH(A1),1)-E2)+35)=MONTH(A1),5,4)

Формула в основном проверяет, есть ли пятый экземпляр в месяце того дня недели, который вы проверяете. Если есть, то возвращается значение 5; в противном случае возвращается значение 4. (Формула правильно предполагает, что может быть только 4 или 5 экземпляров любого дня недели — ни меньше, ни больше.)

Также доступны решения на основе макросов. Вот одно из таких решений:

Function MonthWeekDays(dDate As Date, iWeekDay As Integer)

Dim dLoop As Date     If iWeekDay < 1 Or iWeekDay > 7 Then         MonthWeekDays = CVErr(xlErrNum)

Exit Function     End If     MonthWeekDays = 0     dLoop = DateSerial(Year(dDate), Month(dDate), 1)

Do While Month(dLoop) = Month(dDate)

If WeekDay(dLoop) = iWeekDay Then _             MonthWeekDays = MonthWeekDays + 1         dLoop = dLoop + 1     Loop End Function

Вы используете функцию, вводя в ячейку следующее:

=MonthWeekDays(A1,4)

В этом случае первый аргумент (ячейка A1) содержит дату оцениваемого месяца. Второй аргумент — это числовое значение, представляющее день недели, который вы хотите подсчитать. Это значение должно быть в диапазоне от 1 до 7, где 1 — воскресенье, 2 — понедельник и т. Д.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (2183) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Weekdays_in_a_Month [дни недели в месяце].