Подсчитайте количество рабочих дней между двумя датами с помощью VBA в Microsoft Excel
В этой статье мы создадим определяемую пользователем функцию (UDF) для подсчета количества рабочих дней между указанными датами, включая или исключая субботу и воскресенье как выходные.
Исходные данные для этого примера состоят из даты начала и даты окончания. Мы хотим подсчитать количество рабочих дней между этими датами.
Даты праздников мы указали в графе А листа «Праздники».
В Excel есть встроенная функция NETWORKDAYS для подсчета количества рабочих дней между интервалом.
Синтаксис функции ЧИСТРАБДНИ (ЧИСТРАБДНИ (Дата начала, Дата окончания, [Праздники])
Эта функция исключит дату, указанную в списке праздников, при подсчете количества рабочих дней.
Эта функция по умолчанию считает субботу и воскресенье выходными, поэтому мы не можем подсчитать количество рабочих дней, если у нас есть только одна неделя.
Мы создали специальную функцию «CountWorkingDays» для подсчета количества рабочих дней между интервалом. Эта настраиваемая функция решает проблему функции ЧИСТРАБДНИ. В этой функции мы можем подсчитать количество рабочих дней, даже если есть только одна неделя в субботу или воскресенье.
Синтаксис пользовательской функции
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays и InclSundays — необязательные параметры. По умолчанию оба имеют значения ИСТИНА. Чтобы превратить субботу и воскресенье в рабочие дни, измените значение соответствующего параметра на FALSE.
Microsoft представила функцию ЧИСТРАБДНИ.INTL в Excel 2010. Эта функция решает проблему функции ЧИСТРАБДНИ. В этой функции мы можем указать выходные дни недели. Мы можем указать один или два дня как выходной.
Синтаксис функции NETWORKDAYS.INTL
NETWORKDAYS.INTL (StartDate, EndDate, [Weekend], [Holidays])
В параметре выходные можно указать выходные дни недели.
В этом примере мы будем использовать все три вышеуказанные функции для подсчета количества рабочих дней.
Логическое объяснение
В функции «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]