W tym artykule utworzymy funkcję zdefiniowaną przez użytkownika (UDF), aby zliczać liczbę dni roboczych między określonymi datami, włączając lub wyłączając soboty i niedziele jako tygodnie wolne.
Surowe dane w tym przykładzie składają się z daty rozpoczęcia i daty zakończenia. Chcemy policzyć liczbę dni roboczych między tymi datami.
Daty urlopów określiliśmy w kolumnie A w arkuszu „Wakacje”.
Excel ma wbudowaną funkcję DNI.ROBOCZE do zliczania dni roboczych pomiędzy interwałami.
Składnia funkcji DNI.ROBOCZE
DNI.ROBOCZE(DataRozpoczęcia;DataZakończenia;[Święta])
Funkcja ta wykluczy z liczenia dni roboczych datę określoną na liście Dni wolne.
Ta funkcja domyślnie traktuje soboty i niedziele jako wolne od tygodnia, więc nie możemy liczyć dni roboczych, jeśli mamy tylko jeden tydzień wolny.
Stworzyliśmy niestandardową funkcję „CountWorkingDays” do zliczania dni roboczych pomiędzy interwałami. Ta funkcja niestandardowa obsługuje problem związany z funkcją DNI.ROBOCZE. W tej funkcji możemy zliczyć ilość dni roboczych nawet jeśli jest tylko jeden tydzień wolny w sobotę lub niedzielę.
Składnia funkcji niestandardowej
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays i InclSundays są parametrami opcjonalnymi. Domyślnie oba mają wartości TRUE. Aby zmienić soboty i niedziele na dni robocze, zmień wartość odpowiedniego parametru na FALSE.
Firma Microsoft wprowadziła funkcję DNI.ROBOCZE.INTL w programie Excel 2010. Ta funkcja rozwiązuje problem funkcji DNI.ROBOCZE. W tej funkcji możemy określić dni wolne od tygodnia. Jako tydzień wolny możemy określić jeden lub dwa dni.
Składnia funkcji DNI.ROBOCZE.INTL
DNI.ROBOCZE.INTL(DataRozpoczęcia;DataZakończenia;[Weekend];[Święta])
W parametrze weekend możemy określić dni wolne od pracy.
W tym przykładzie użyjemy wszystkich powyższych trzech funkcji, aby policzyć liczbę dni roboczych.
Wyjaśnienie logiczne
W funkcji „CountWorkingDays” najpierw sprawdzamy, czy dana data w parametrze istnieje na określonej liście świąt. Jeżeli data istnieje na liście dni wolnych, to dzień ten nie jest wliczany do liczby dni roboczych. Jeśli daty nie ma na liście świąt, sprawdź, czy podana data to sobota czy niedziela. Na podstawie podanego parametru wejściowego sprawdź, czy uwzględnić lub wykluczyć soboty lub niedziele jako święta.
Wyjaśnienie kodu
Ustaw RngFind = Worksheets("Wakacje").Kolumny(1).Find(i)
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
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żeli warunek zwraca TRUE, to ten dzień nie jest wliczany do liczby dni roboczych.
Proszę postępować zgodnie z poniższym kodem!
Option Funkcja jawna CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Deklarowanie zmiennych Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next ' Znajdowanie lokalizacji, w której istnieje podana data w arkuszu Święta Set RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Sprawdzanie, czy w danym dniu jest święto If Not RngFind Is Nothing Then GoTo ForLast End If 'Sprawdzanie, czy w podanym dniu jest sobota If InclSaturdays Then If Weekday(i, 2) = 6 Then GoTo ForLast End If End If 'Sprawdzanie, czy w podanym dniu jest niedziela If InclSundays Then If Weekday(i, 2) = 7 Następnie GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End funkcja
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