Проверка дали е празник на определената дата с помощта на VBA в Microsoft Excel

Anonim

В тази статия ще създадем функция, дефинирана от потребителя (UDF), за да проверим дали е празник на определената дата, включително или изключване на събота и неделя като почивни дни.

Суровите данни за тази извадка се състоят от последователни дати в колона А. Ще открием дали това е празник на дадената дата, включително или без почивна седмица в събота или неделя.

Посочихме датите за почивка в колона А на лист „Празници“.

Създадохме персонализирана функция „IsHoliday“, за да намерим състоянието на празника на дадената дата.

Синтаксис на функцията

IsHoliday (Дата, вкл. Събота, вкл. Неделя)

InclSaturdays и InclSundays са незадължителни параметри. По подразбиране и двете имат TRUE стойност. За да промените събота и неделя в работни дни, променете стойността на съответния параметър на FALSE.

Използвахме формулата по -долу в клетка C9, за да намерим състоянието на празника за дата в клетка A9, считайки събота за работен ден.

= IsHoliday (A9, FALSE)

Използвахме формулата по -долу в клетка D9, за да намерим състоянието на празника за дата в клетка A9, като считаме съботите и неделите за работни дни.

= IsHoliday (A9, FALSE, FALSE)

Използвахме формулата по -долу в клетка E9, за да намерим състоянието на ваканцията за дата в клетка A9, като считаме съботите и неделите за почивни дни.

= IsHoliday (A9)

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

Във функцията “IsHoliday” първо проверяваме дали дадена дата в параметъра съществува в посочения списък с ваканции. Ако в списъка с ваканции има дата, върнете „Holiday“ като изход. Ако датата не съществува в списъка с ваканции, проверете дали дадената дата е събота или неделя. Въз основа на предоставения входен параметър проверете дали да включите или изключите събота или неделя като празници.

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

Задайте RngFind = Работни листове ("Празници"). Колони (1). Find (LngDate)

Горният код се използва за намиране на мястото, където посочената дата съществува в списъка с ваканции.

Ако не, тогава RngFind не е нищо

OK = "Празник"

Отиди на последно

Край Ако

Горният код се използва за проверка дали посочената дата съществува в списъка с ваканции. Ако условието връща TRUE, тогава персонализираната функция връща “Holiday” като изход и контролата се измества към последния ред на UDF.

Моля, следвайте кода по -долу

 Опция Изрична функция IsHoliday (LngDate As Date, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Деклариране на променливи Dim RngFind As Range Dim OK As String' Инициализиране на променливата OK = "Работен ден" При грешка Възобновяване на следващата ' Намиране на местоположението, където съществува посочената дата в листа за празници Задайте RngFind = Работни листове ("Holidays"). Колони (1). Find (LngDate) On Error GoTo 0 'Проверява дали е датата на дадената дата, ако не RngFind Is Nothing След това OK = "Holiday" GoTo Last End If 'Проверява дали е събота на дадената дата If InclSaturdays then If Weekday (LngDate, 2) = 6 then OK = "Holiday" GoTo Last End If End If' Проверява дали е неделя на дадена дата If InclSundays Then If Weekday (LngDate, 2) = 7 then OK = "Holiday" End If End If Last: IsHoliday = OK End Функция 

Ако този блог ви е харесал, споделете го с приятелите си във Facebook. Също така можете да ни следвате в Twitter и Facebook.

Ще се радваме да чуем от вас, уведомете ни как можем да подобрим работата си и да я направим по -добра за вас. Пишете ни на имейл сайта