Baza wiedzy / Excel

DZIEŃ.ROBOCZY w Excelu: termin z weekendami i świętami

Rozpisuję pięć dni po poniedziałku i pokazuję, jak dodatkowy dzień wolny przesuwa termin. Wyjaśniam też start w weekend i liczenie wstecz.

Kajo RudzińskiOpublikowano Aktualizacja 4 min czytania

Ścieżka po polach kalendarza omija dwie ciemne kolumny i dociera do skrzynki

Mam datę przyjęcia zlecenia i pięć dni roboczych na kolejny etap. Dodanie pięciu do daty przesuwa kalendarz o pięć dni, razem z sobotą i niedzielą. Jeśli termin ma omijać weekendy, używam DZIEŃ.ROBOCZY, czyli angielskiego WORKDAY.

Funkcja zwraca datę po przesunięciu o określoną liczbę dni roboczych. W tym haśle pokazuję małe przykłady syntetyczne. Kalendarz firmy jest założeniem przykładu; lista dni wolnych nie stanowi wykazu świąt dla konkretnego kraju.

Składnia i znaczenie argumentów

W polskim Excelu zapisuję:

=DZIEŃ.ROBOCZY(data_początkowa;dni;[święta])

Nawiasy kwadratowe w opisie oznaczają argument opcjonalny. Nie wpisuję ich do formuły. data_początkowa jest punktem startu, dni określa przesunięcie, a święta to zakres dat dodatkowo wyłączanych z liczenia. Zwykła wersja pomija soboty i niedziele.

Dodatnie przesunięcie wyznacza późniejszą datę, ujemne wcześniejszą. Takie zachowanie opisuje dokumentacja DZIEŃ.ROBOCZY. Data startowa jest punktem odniesienia: przy przesunięciu o jeden dzień do przodu szukam następnego dnia roboczego.

Przykłady używają polskich nazw i średników. W angielskim Excelu zobaczysz WORKDAY i DATE; separator argumentów zależy od ustawień regionalnych. Microsoft dokumentuje tę funkcję dla Microsoft 365 oraz m.in. Excel 2024, 2021, 2019 i 2016.

Pięć dni po poniedziałku

Biorę poniedziałek 3 czerwca 2024. Bez dodatkowych dni wolnych wpisuję:

=DZIEŃ.ROBOCZY(DATA(2024;6;3);5)

Wynikiem jest 10 czerwca 2024, czyli kolejny poniedziałek. Przechodzę przez kalendarz krok po kroku:

Liczony dzień roboczy Data Dzień tygodnia
1 2024-06-04 wtorek
2 2024-06-05 środa
3 2024-06-06 czwartek
4 2024-06-07 piątek
5 2024-06-10 poniedziałek

Sobota i niedziela między piątkiem a poniedziałkiem nie zużywają przesunięcia. Sam 3 czerwca także nie jest pierwszym dniem tego przesunięcia. Jeżeli Twoja procedura nazywa datę startu „dniem pierwszym”, trzeba osobno uzgodnić takie liczenie. Formuła powinna odzwierciedlać ustaloną zasadę.

Datę buduję przez DATA, żeby uniknąć niejednoznacznego tekstu typu 03/06/2024. W gotowym arkuszu może to być odwołanie do komórki zawierającej prawdziwą datę Excela. Wynik również przechowuje datę jako liczbę, więc ustawiam format komórki na datę.

Dzień wolny przesuwa termin

W D2 wpisuję datę =DATA(2024;6;10). W naszym syntetycznym kalendarzu jest to dodatkowy dzień zamknięcia firmy. Wtedy używam:

=DZIEŃ.ROBOCZY(DATA(2024;6;3);5;D2:D2)

Wtorek, środa, czwartek i piątek pozostają pierwszymi czterema dniami. Sobota i niedziela odpadają jako weekend, a poniedziałek 10 czerwca jako dzień z listy. Piątym dniem zostaje wtorek 11 czerwca.

Funkcja nie pobiera automatycznie krajowego kalendarza świąt. To ja utrzymuję listę. Przy wielu zleceniach trzymam ją w jednym miejscu i opisuję, dla jakiej lokalizacji oraz okresu obowiązuje. Jeżeli różne zespoły mają różne kalendarze, nie zakładam, że jeden wspólny zakres będzie pasował do wszystkich.

W formule kopiowanej w dół listy zleceń blokuję zakres dni wolnych, jeśli ma pozostać wspólny, np. $D$2:$D$10. Daty zamówień mogą zmieniać się wierszami, ale przypadkowe przesuwanie listy świąt zmieniłoby zasady wyznaczania terminów.

Dwie ścieżki terminów: dodatkowe wolne pole wymusza objazd na dolnej trasie

Start w weekend i przesunięcie wstecz

Start przypadający w sobotę nie oznacza, że wynik też będzie sobotą. Dla soboty 1 czerwca 2024 i dodatniego przesunięcia o pięć dni roboczych liczę poniedziałek 3 czerwca jako pierwszy, a piątek 7 czerwca jako piąty.

Start Przesunięcie Dodatkowe wolne Wynik
2024-06-01 5 brak 2024-06-07
2024-06-01 10 brak 2024-06-14
2024-06-01 5 2024-06-05 2024-06-10
2024-06-03 -1 brak 2024-05-31

W ostatnim wierszu cofam się z poniedziałku do poprzedniego piątku. Ujemna liczba dni jest prawidłowym sposobem wyznaczenia daty wcześniejszej. Nie trzeba ręcznie korygować wyniku za weekend.

Inne weekendy: DZIEŃ.ROBOCZY.NIESTAND

Jeśli wolne są piątki i soboty, używam DZIEŃ.ROBOCZY.NIESTAND, czyli WORKDAY.INTL. Prawidłowa polska nazwa ma końcówkę .NIESTAND.

=DZIEŃ.ROBOCZY.NIESTAND(DATA(2024;6;3);5;7)

Argument 7 wskazuje weekend piątek-sobota. Zgodnie z tabelą kodów Microsoft kod 16 oznacza tylko piątek, a 5 środę i czwartek. Nie odczytuję tych kodów jako zwykłych numerów dni tygodnia.

W przykładzie liczę wtorek 4, środę 5, czwartek 6, niedzielę 9 i poniedziałek 10 czerwca. Wynik to 10 czerwca. Dodatkową listę świąt podaję dopiero jako czwarty argument tej funkcji.

Granice tego obliczenia

DZIEŃ.ROBOCZY liczy całe dni. Dokumentacja podaje, że część ułamkowa liczby dni jest obcinana. Wartość 1,9 nie ustanawia więc harmonogramu z końcem po niemal dwóch dniach roboczych. Do terminów godzinowych, zmian i godzin otwarcia potrzebny jest dokładniejszy model.

Niepoprawne daty mogą dać błąd wartości, a wynik poza zakresem obsługiwanych dat błąd liczbowy. Najpierw sprawdzam komórki wejściowe i format danych. Zmiana wyglądu tekstu na format daty nie gwarantuje, że tekst został rzeczywiście zamieniony na datę.

Termin wyznaczony według kalendarza nie jest potwierdzeniem dostawy ani informacją o dostępności pracownika. Czas realizacji, start liczenia i dni zamknięcia pozostają założeniami procesu. Dlatego w raporcie dopisuję, jaki kalendarz zastosowałem.

Jeśli chcesz dostać liczbę dni w przedziale, zamiast daty końcowej, przejdź do DNI.ROBOCZE. Na ćwiczenie zmień dodatkowy dzień wolny z poniedziałku 10 czerwca na wtorek 4 czerwca i rozpisz pięć liczonych dni. Najpierw ustal wynik na kalendarzu, potem porównaj ze swoim arkuszem.

Najważniejsze w pigułce

Czy data startowa jest pierwszym dniem przesunięcia?

Przy dodatnim przesunięciu liczone są kolejne dni robocze po dacie startowej. Jeden dzień oznacza następny dzień roboczy.

Czy Excel sam pobiera święta państwowe?

Nie. Daty do pominięcia podajesz w argumencie święta i utrzymujesz odpowiedni kalendarz.

Jak ustawić wolne piątki i soboty?

Użyj DZIEŃ.ROBOCZY.NIESTAND z kodem weekendu 7. Kod 16 oznacza tylko piątek.

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.