В тази статия ще създадем Потребителска функция (UDF), за да отчита броя на работните дни между посочените дати, включително или изключвайки съботите и неделите като почивни дни през седмицата.
Суровите данни за този пример се състоят от начална и крайна дата. Искаме да преброим броя работни дни между тези дати.
Посочихме датите за почивка в колона А в лист „Празници“.
Excel има вградена функция NETWORKDAYS за отчитане на броя работни дни между интервала.
Синтаксис на функцията NETWORKDAYS
МРЕЖНИ ДНИ (Начална дата, Крайна дата, [Празници])
Тази функция ще изключи датата, посочена в списъка на празниците, като същевременно отчита броя на работните дни.
Тази функция разглежда съботите и неделите като почивни дни по подразбиране, така че не можем да преброим броя на работните дни, в случай че имаме само една почивна седмица.
Създадохме персонализирана функция „CountWorkingDays“, за да преброим броя работни дни между интервала. Тази персонализирана функция се справя с проблема с функцията NETWORKDAYS. В тази функция можем да преброим броя на работните дни, дори ако има само една почивна седмица в събота или неделя.
Синтаксис на персонализирана функция
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays и InclSundays са незадължителни параметри. По подразбиране и двете имат TRUE стойности. За да промените събота и неделя в работни дни, променете стойността на съответния параметър на FALSE.
Microsoft представи функцията NETWORKDAYS.INTL с Excel 2010. Тази функция се справя с проблема с функцията NETWORKDAYS. В тази функция можем да посочим почивните дни. Можем да посочим един или два дни като почивна седмица.
Синтаксис на функцията NETWORKDAYS.INTL
NETWORKDAYS.INTL (Начална дата, Крайна дата, [Уикенд], [Празници])
В параметъра уикенд можем да посочим почивни дни.
В този пример ще използваме всички горепосочени три функции, за да преброим броя на работните дни.
Логично обяснение
Във функцията “CountWorkingDays” първо проверяваме дали дадена дата в параметъра съществува в посочения ваканционен списък. Ако датата съществува в списъка с ваканции, тогава този ден не се отчита в броя на работните дни. Ако датата не съществува в списъка с ваканции, проверете дали дадената дата е събота или неделя. Въз основа на предоставения входен параметър проверете дали да включите или изключите събота или неделя като почивен ден.
Обяснение на кода
Задайте RngFind = Работни листове ("Празници"). Колони (1). Find (i)
Горният код се използва за намиране на мястото, където посочената дата съществува в списъка с ваканции.
Ако не, тогава RngFind не е нищо
Отиди ForLast
Край Ако
Горният код се използва за проверка дали посочената дата съществува в списъка с ваканции. Ако условието връща TRUE, тогава този ден не се отчита в броя на работните дни.
Моля, следвайте кода по -долу
Опция Изрична функция CountWorkingDays (StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Деклариране на променливи Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next' Намиране на местоположението, където съществува посочената дата в листа за празници Задайте RngFind = Работни листове ("Празници"). Колони (1). Намерете (i) При грешка GoTo 0 'Проверете дали е датата на дадената дата, ако не RngFind не е нищо Тогава GoTo ForLast End If 'Проверява дали е събота на дадена дата If InclSaturdays Then If Weekday (i, 2) = 6 then GoTo ForLast End If End If' Проверява дали е неделя на дадена дата If InclSundays Then If Weekday (i, 2) = 7 Тогава GoTo ForLast End If End If Count If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Функция
Ако този блог ви е харесал, споделете го с приятелите си във Facebook. Също така можете да ни следвате в Twitter и Facebook.
Ще се радваме да чуем от вас, уведомете ни как можем да подобрим работата си и да я направим по -добра за вас. Пишете ни на имейл сайта