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

Исходные данные для этого примера состоят из даты начала и даты окончания. Мы хотим подсчитать количество рабочих дней между этими датами.

ArrowMain

Даты праздников мы указали в графе А листа «Праздники».

ArrowHolidayList

В Excel есть встроенная функция NETWORKDAYS для подсчета количества рабочих дней между интервалом.

Синтаксис функции ЧИСТРАБДНИ (ЧИСТРАБДНИ (Дата начала, Дата окончания, [Праздники])

Эта функция исключит дату, указанную в списке праздников, при подсчете количества рабочих дней.

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

Мы создали специальную функцию «CountWorkingDays» для подсчета количества рабочих дней между интервалом. Эта настраиваемая функция решает проблему функции ЧИСТРАБДНИ. В этой функции мы можем подсчитать количество рабочих дней, даже если есть только одна неделя в субботу или воскресенье.

Синтаксис пользовательской функции

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays и InclSundays — необязательные параметры. По умолчанию оба имеют значения ИСТИНА. Чтобы превратить субботу и воскресенье в рабочие дни, измените значение соответствующего параметра на FALSE.

Microsoft представила функцию ЧИСТРАБДНИ.INTL в Excel 2010. Эта функция решает проблему функции ЧИСТРАБДНИ. В этой функции мы можем указать выходные дни недели. Мы можем указать один или два дня как выходной.

Синтаксис функции NETWORKDAYS.INTL

NETWORKDAYS.INTL (StartDate, EndDate, [Weekend], [Holidays])

В параметре выходные можно указать выходные дни недели.

В этом примере мы будем использовать все три вышеуказанные функции для подсчета количества рабочих дней.

ArrowOutput

Логическое объяснение

В функции «CountWorkingDays» сначала мы проверяем, существует ли указанная в параметре дата в указанном списке выходных. Если дата есть в списке выходных, то этот день не учитывается в количестве рабочих дней. Если даты нет в списке праздников, проверьте, является ли данная дата субботой или воскресеньем. На основе предоставленного входного параметра проверьте, нужно ли включать или исключать субботу или воскресенье как праздничные дни.

Объяснение кода

Установите RngFind = Worksheets («Holidays»). Columns (1) .Find (i)

Приведенный выше код используется для поиска места, где указанная дата существует в списке праздников.

Если Not RngFind Is Nothing, то GoTo ForLast End Если вышеуказанный код используется для проверки, существует ли указанная дата в списке праздников. Если условие возвращает ИСТИНА, то этот день не учитывается в количестве рабочих дней.

Пожалуйста, введите код ниже

Option Explicit

Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _

Optional InclSundays As Boolean = True)

'Declaring variables

Dim RngFind As Range

Dim i As Long

For i = StartDate To EndDate



On Error Resume Next



'Finding the location where the specified date exist in the Holidays sheet

Set RngFind = Worksheets("Holidays").Columns(1).Find(i)



On Error GoTo 0



'Checking whether it is holiday on the given date

If Not RngFind Is Nothing Then

GoTo ForLast

End If



'Checking whether it is Saturday on given date

If InclSaturdays Then

If Weekday(i, 2) = 6 Then

GoTo ForLast

End If

End If



'Checking whether it is Sunday on given date

If InclSundays Then

If Weekday(i, 2) = 7 Then

GoTo ForLast

End If

End If



CountWorkingDays = CountWorkingDays + 1



ForLast:

Next

End Function

Если вам понравился этот блог, поделитесь им с друзьями на Facebook и Facebook.

Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]