W tym artykule utworzymy funkcję zdefiniowaną przez użytkownika (UDF), aby sprawdzić, czy jest to święto w określonym dniu, włączając lub wyłączając soboty i niedziele jako tygodnie wolne.
Surowe dane dla tej próbki składają się z dat w kolejności w kolumnie A. Dowiemy się, czy w danym dniu jest święto, z uwzględnieniem lub bez tygodnia wolnego w sobotę lub niedzielę.
Daty urlopów określiliśmy w kolumnie A na arkuszu „Wakacje”.
Stworzyliśmy niestandardową funkcję „IsHoliday” umożliwiającą odnalezienie statusu urlopu w danym dniu.
Składnia funkcji
IsHoliday (data, wliczając soboty, wliczając niedziele)
InclSaturdays i InclSundays są parametrami opcjonalnymi. Domyślnie oba mają wartość TRUE. Aby zmienić sobotę i niedzielę na dni robocze, zmień wartość odpowiedniego parametru na FALSE.
Użyliśmy poniższej formuły w komórce C9, aby znaleźć stan świąteczny dla daty w komórce A9, biorąc pod uwagę sobotę jako dzień roboczy.
=Jest dzień wolny(A9;FAŁSZ)
Użyliśmy poniższej formuły w komórce D9, aby znaleźć stan świąteczny dla daty w komórce A9, biorąc pod uwagę soboty i niedziele jako dni robocze.
=JestWakacje(A9;FAŁSZ;FAŁSZ)
Użyliśmy poniższej formuły w komórce E9, aby znaleźć stan świąteczny dla daty w komórce A9, biorąc pod uwagę soboty i niedziele jako wolne od tygodnia.
=JestWakacje(A9)
Wyjaśnienie logiczne
W funkcji „IsHoliday” najpierw sprawdzamy, czy dana data w parametrze istnieje na podanej liście świąt. Jeśli data istnieje na liście świąt, zwróć „Wakacje” jako dane wyjściowe. Jeżeli na liście świąt nie ma daty, to sprawdź, czy podana data to sobota czy niedziela. Na podstawie podanego parametru wejściowego sprawdź, czy uwzględnić lub wykluczyć sobotę lub niedzielę jako święta.
Wyjaśnienie kodu
Ustaw RngFind = Worksheets("Wakacje").Columns(1).Find(LngDate)
Powyższy kod służy do znalezienia miejsca, w którym na liście urlopów istnieje określona data.
Jeśli nie RngFind to nic, to
OK = "Wakacje"
Przejdź do ostatniego
Zakończ, jeśli
Powyższy kod służy do sprawdzenia, czy podana data istnieje na liście świąt. Jeśli warunek zwraca TRUE, funkcja niestandardowa zwraca „Holiday” jako dane wyjściowe, a sterowanie przesuwa się do ostatniego wiersza UDF.
Proszę postępować zgodnie z poniższym kodem!
Option Explicit Function IsHoliday(LngDate As Date, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Deklarowanie zmiennych Dim RngFind As Range Dim OK As String 'Inicjowanie zmiennej OK = "Dzień roboczy" On Error Resume Next ' Znajdowanie lokalizacji, w której istnieje określona data w arkuszu Święta Set RngFind = Worksheets("Holidays").Columns(1).Find(LngDate) On Error GoTo 0 'Sprawdzanie, czy w danym dniu jest dzień wolny If Not RngFind Is Nothing Then OK = "Holiday" GoTo Last End If 'Sprawdzanie, czy w podanym dniu jest sobota If InclSaturdays Then If Weekday(LngDate, 2) = 6 Then OK = "Holiday" GoTo Last End If End If 'Sprawdzanie, czy jest niedziela w dniu podana data If InclSundays Then If Weekday(LngDate, 2) = 7 Then OK = "Holiday" End If End If Last: IsHoliday = OK End Function
Jeśli podobał Ci się ten blog, podziel się nim ze znajomymi na Facebooku. Możesz również śledzić nas na Twitterze i Facebooku.
Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy poprawić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail