Baza wiedzy / Excel

DNI.ROBOCZE w Excelu: granice dat i kalendarz wolnych dni

Pokazuję liczenie dni od poniedziałku do piątku i wyjaśniam, dlaczego wolna sobota nie zmniejsza wyniku drugi raz.

Kajo RudzińskiOpublikowano Aktualizacja 5 min czytania

Klocki z roboczych pól kalendarza są zbierane do osobnej tacy

Gdy mam datę początku i końca, chcę czasem wiedzieć, ile dni roboczych mieści się w tym przedziale. W Excelu używam do tego DNI.ROBOCZE, czyli NETWORKDAYS. Wynikiem jest liczba dni, przy przyjętym kalendarzu weekendów i dodatkowych dni wolnych.

Najważniejszy szczegół: oba końce przedziału są brane pod uwagę, jeśli przypadają na dzień roboczy. Od poniedziałku do piątku mam zatem pięć dni. Odejmowanie samych dat daje inną wielkość.

Składnia funkcji DNI.ROBOCZE

W polskim Excelu zapisuję:

=DNI.ROBOCZE(data_początkowa;data_końcowa;[święta])

Podaję dwie daty, a opcjonalnie zakres dodatkowych dni wolnych. Nawiasy kwadratowe są oznaczeniem argumentu opcjonalnego w opisie, bez wpisywania ich do gotowej formuły. Standardowy weekend to sobota i niedziela.

Dokumentacja Microsoft opisuje liczenie całych dni roboczych i zaleca przekazywanie dat przez DATE, czyli polską DATA, albo jako wyniki innych formuł. Tekst wyglądający jak data może być interpretowany zależnie od ustawień.

Przykłady używają polskich nazw i średników. W wersji angielskiej są to NETWORKDAYS i DATE, zwykle z przecinkami. Separator argumentów zależy od konfiguracji regionalnej. Funkcja jest dostępna w Microsoft 365 oraz m.in. Excel 2024, 2021, 2019 i 2016.

Od poniedziałku do piątku, włącznie

Weźmy syntetyczny okres od 3 do 7 czerwca 2024, bez dodatkowych dni wolnych:

=DNI.ROBOCZE(DATA(2024;6;3);DATA(2024;6;7))

Wynik to 5. Liczę poniedziałek 3, wtorek 4, środę 5, czwartek 6 i piątek 7 czerwca. Daty początku i końca są dniami roboczymi, więc obie wchodzą do wyniku.

Początek Koniec Wynik bez dodatkowych wolnych
2024-06-03 2024-06-03 1
2024-06-08 2024-06-08 0
2024-06-03 2024-06-07 5
2024-06-03 2024-06-09 5
2024-06-03 2024-06-10 6

Sobota 8 czerwca nie zostaje dniem roboczym tylko dlatego, że jest jednocześnie początkiem i końcem zakresu. Z kolei dołożenie poniedziałku 10 czerwca zwiększa wynik do sześciu. Ta tabela pomaga mi sprawdzić, czy przyjęta definicja okresu pasuje do procesu.

Jeśli raport ma pomijać datę przyjęcia zgłoszenia, opisuję taki warunek oddzielnie i odpowiednio wyznaczam początek liczonego przedziału. Nie odejmuję mechanicznie jedynki od każdego wyniku: początek mógł przypadać w weekend albo na dzień wolny.

Święta są dostarczaną listą

W D2 wpisuję =DATA(2024;6;5). W tym przykładzie jest to umowny dzień zamknięcia firmy. Wówczas:

=DNI.ROBOCZE(DATA(2024;6;3);DATA(2024;6;7);D2:D2)

Wynik wynosi 4. Środa nie jest już liczona, a pozostałe cztery dni pozostają robocze. Excel nie wie sam, w jakim kraju ani według jakiego kalendarza działa firma. Muszę podać właściwe daty.

Lista może zawierać więcej dni i obejmować cały okres raportu. Przy kopiowaniu formuły pilnuję stałego zakresu świąt, np. $D$2:$D$20. Przesunięcie zakresu wraz z kolejnym wierszem mogłoby dać różne kalendarze dla porównywalnych zleceń.

Nie nazywam też przykładowego zamknięcia świętem państwowym bez osobnego ustalenia. W kalendarzu operacyjnym mogą występować postoje lub lokalne dni wolne. Funkcji wystarczają ich daty, lecz odbiorca raportu powinien znać zasady listy.

Dwa kalendarze pokazują, jak nakładka na roboczym polu usuwa jeden liczony klocek

Dzień wolny w sobotę nie odejmuje kolejnego dnia

Spójrzmy na okres od 10 do 20 czerwca 2024. Bez dodatkowych wyłączeń liczę pięć dni od poniedziałku do piątku oraz cztery od kolejnego poniedziałku do czwartku. Razem 9.

Jeśli dodam do listy sobotę 15 czerwca, wynik nadal wynosi 9. Sobota już została pominięta jako weekend. Nie odejmuję jej drugi raz.

Jeśli zamiast tego wyłączę środę 12 czerwca, otrzymam 8. Różnica wynika z tego, że 12 czerwca wcześniej należał do liczonych dni. Wszystkie te daty służą tu wyłącznie do pokazania mechanizmu na syntetycznym kalendarzu.

To dobry punkt kontrolny dla raportu. Gdy dodanie weekendowej daty do listy zmniejsza ręcznie wyliczony wynik, prawdopodobnie odjęto ją dwukrotnie. Przy poprawnym kalendarzu konkretna data jest albo liczona, albo wyłączona.

Inne weekendy: DNI.ROBOCZE.NIESTAND

Dla wolnych piątków i sobót używam polskiej funkcji DNI.ROBOCZE.NIESTAND, czyli NETWORKDAYS.INTL:

=DNI.ROBOCZE.NIESTAND(DATA(2024;6;3);DATA(2024;6;7);7)

Kod 7 oznacza piątek i sobotę. W tym przedziale liczone są poniedziałek, wtorek, środa i czwartek, więc wynik to 4. Piątek odpada według nowej definicji weekendu.

Kody i składnię opisuje Microsoft. Dodatkową listę dni wolnych podaję jako czwarty argument. Nie przenoszę jej automatycznie na trzecią pozycję ze zwykłej funkcji, bo w wersji .NIESTAND trzeci argument ma inne znaczenie.

Dni robocze, termin i przepracowane godziny

DNI.ROBOCZE zwraca liczbę dni w przedziale. DZIEŃ.ROBOCZY wyznacza datę po przesunięciu o liczbę dni. Te funkcje mogą używać tego samego kalendarza, ale inaczej traktują pytanie o początek.

Pięć dni roboczych po poniedziałku 3 czerwca prowadzi do poniedziałku 10 czerwca. Przedział od 3 do 10 czerwca włącznie zawiera jednak sześć dni roboczych. Z tego powodu nie sprawdzam obu funkcji prostym oczekiwaniem identycznej liczby bez uwzględnienia granic.

Liczba roboczych dat nie jest ewidencją czasu pracy. Nie uwzględnia samodzielnie etatu, godzin zmiany, nieobecności ani przestojów, których nie dodano do kalendarza. Pomnożenie wyniku przez osiem ma sens dopiero po przyjęciu odpowiedniego modelu dnia pracy.

Co sprawdzam przed przekazaniem arkusza

Ustawiam komórkę wyniku jako liczbę, bo oczekuję liczby dni. Format daty mógłby nadać poprawnemu wynikowi 5 zupełnie mylący wygląd. Kontroluję też, czy oba wejścia są datami, czy koniec odpowiada zamierzonemu okresowi i czy lista dni wolnych obejmuje właściwy rok oraz zespół.

Przy błędzie wartości wracam do danych wejściowych. Przy zaskakującej różnicy o jeden dzień najpierw sprawdzam granice. W większości prostych arkuszy takie dwa pytania pomagają szybciej niż przepisywanie całej formuły.

Na ćwiczenie weź tydzień od 3 do 9 czerwca 2024. Najpierw policz standardowe dni robocze, potem wyłącz środę, a na końcu zmień weekend na piątek-sobotę. Dla każdej wersji wypisz daty, które faktycznie weszły do wyniku. Dzięki temu widzisz kalendarz stojący za liczbą.

Najważniejsze w pigułce

Czy DNI.ROBOCZE liczy początek i koniec?

Tak, jeśli te daty są dniami roboczymi według przyjętego kalendarza.

Czy święto w sobotę odejmuje dodatkowy dzień?

Nie. Przy standardowym weekendzie sobota jest już wyłączona z liczenia.

Czy wynik oznacza liczbę przepracowanych godzin?

Nie. To liczba roboczych dat według kalendarza. Godziny i faktyczna obecność wymagają osobnych danych.

Przy pracy nad artykułem użyto w zautomatyzowany sposób sztucznej inteligencji. Jeśli też chcesz tak umieć, sprawdź ten projekt.

Kajo Rudziński

Newsletter KajoData

Zostańmy w kontakcie.

Piszę o analizie danych, uczeniu się i zmianie pracy. Dzielę się tym, co pomaga mi ogarniać technologię i zawodowe decyzje. Jeśli lubisz ten sposób myślenia, zapraszam do mojego newslettera.