Baza wiedzy / Excel
NR.SER.OST.DN.MIES w Excelu: ostatni dzień miesiąca i granice raportu
Wyjaśniam przesunięcia miesięcy, granice dat i różnicę między końcem kalendarzowym a dniem roboczym. Poprawiam błędną nazwę NR.KONIEC.MIES.

Jeżeli potrzebuję daty ostatniego dnia miesiąca, korzystam z NR.SER.OST.DN.MIES. Nazwa jest długa, ale działanie proste: podaję datę oraz przesunięcie w miesiącach. W angielskim Excelu ta sama funkcja nazywa się EOMONTH. Starsza wersja tego hasła używała błędnej nazwy NR.KONIEC.MIES; poprawiam ją w tytule i formułach, zachowując dotychczasowy adres strony.
W przykładach używam dat syntetycznych i polskich separatorów ze średnikiem. Wyniki wyprowadzam z dokumentacji Microsoft i kalendarza, bez uruchamiania skoroszytu. Konfiguracja regionalna może wymagać innych separatorów. Zacznę od pełnej daty końca miesiąca, potem pokażę dwie granice raportu oraz wariant z dniem roboczym.
Składnia i znaczenie zera
Microsoft dokumentuje funkcję NR.SER.OST.DN.MIES z dwoma wymaganymi argumentami:
=NR.SER.OST.DN.MIES(data_początkowa;miesiące)
Pierwszy argument wskazuje datę odniesienia. Drugi mówi, o ile miesięcy przesunąć wybór miesiąca: dodatnia liczba prowadzi do przodu, ujemna do tyłu. Zero oznacza koniec miesiąca wskazanej daty. Nie musi to być miesiąc dzisiejszy: zależy od wartości przekazanej do funkcji.
Wynik jest liczbą reprezentującą datę. Żeby zobaczyć go jako datę, nadaj komórce format daty. Jeżeli widzisz sam numer seryjny, sprawdź format, zanim zaczniesz poprawiać formułę. Dokumentacja obejmuje Excel 2016, 2019, 2021, 2024 i Microsoft 365.
Trzy wyniki dla jednej daty
W A2 wpisz =DATA(2024;6;15). To jednoznacznie zbudowana data 15 czerwca 2024. Następnie porównaj przesunięcia 0, 1 i -1:
| Formuła | Wynik jako data | Wyjaśnienie |
|---|---|---|
=NR.SER.OST.DN.MIES(A2;0) |
2024-06-30 | koniec miesiąca A2 |
=NR.SER.OST.DN.MIES(A2;1) |
2024-07-31 | koniec następnego miesiąca |
=NR.SER.OST.DN.MIES(A2;-1) |
2024-05-31 | koniec poprzedniego miesiąca |
Najpierw wybieram miesiąc, potem jego ostatni dzień. Data wejściowa może przypadać na dowolny dzień tego miesiąca. Nie dodaję trzydziestu dni, bo kolejne miesiące mają różną długość. Wybór następnego miesiąca nie oznacza przesunięcia o stałą liczbę dni.
Dla daty w lutym 2024 koniec tego samego miesiąca to 29 lutego. Dla daty w lutym 2025 będzie to 28 lutego. To prosty przypadek do sprawdzenia na kalendarzu, który pokazuje, dlaczego ręczne wpisanie stałej długości miesiąca jest słabym pomysłem.
Ustal początek i koniec okresu raportowego
Do miesięcznego raportu często potrzebuję początku danego miesiąca i początku kolejnego. Z datą odniesienia w A2 mogę zapisać:
=NR.SER.OST.DN.MIES(A2;-1)+1
=NR.SER.OST.DN.MIES(A2;0)+1
Dla 15 czerwca 2024 pierwsza formuła wskazuje 1 czerwca, a druga 1 lipca. Pierwszy wynik powstaje przez dodanie jednego dnia do 31 maja. Drugi przez dodanie dnia do 30 czerwca. Na tych dwóch granicach można oprzeć warunek: data zdarzenia od początku czerwca włącznie i przed początkiem lipca.
Takie określenie zakresu pomaga, gdy źródło przechowuje także godziny. Microsoft opisuje daty jako liczby, a czas jako ułamkową część dnia. Porównanie do samej daty 30 czerwca może pominąć zdarzenia z późniejszej części tego dnia, jeśli porównujesz pełne znaczniki czasu. W projekcie sprawdzam typ danych i znaczenie granic, zamiast zakładać, że sam napis daty na ekranie opisuje całą wartość.
Nie podaję tu gotowej formuły agregującej dowolny import. Najpierw trzeba ustalić, czy dane są prawdziwymi datami Excela, jak zapisano czas i jakie rekordy mają wejść do raportu. Dwie poprawne granice to część rozwiązania. Jakość źródła pozostaje osobnym zadaniem.
Kalendarzowy koniec miesiąca a dzień roboczy
Koniec miesiąca może wypaść w weekend. Jeżeli potrzebuję ostatniego dnia roboczego według modelu od poniedziałku do piątku, mogę użyć DZIEŃ.ROBOCZY:
=DZIEŃ.ROBOCZY(NR.SER.OST.DN.MIES(A2;0)+1;-1)
Zaczynam od pierwszego dnia następnego miesiąca i cofam się o jeden dzień roboczy. Dla czerwca 2024 data końca miesiąca to niedziela 30 czerwca. Punktem startowym jest 1 lipca, a wynik to piątek 28 czerwca. W tym przykładzie nie podaję listy dni wolnych.
Jeśli w H2:H4 masz prawidłowe daty dodatkowych dni wolnych, przekazujesz je trzecim argumentem:
=DZIEŃ.ROBOCZY(NR.SER.OST.DN.MIES(A2;0)+1;-1;H2:H4)
To Ty dostarczasz właściwy kalendarz. Funkcja nie pobiera automatycznie świąt państwowych ani dni zamknięcia firmy. Dla innych weekendów potrzebne jest rozwiązanie uwzględniające ich konfigurację, na przykład DZIEŃ.ROBOCZY.NIESTAND. Nie nazywam prostego odjęcia weekendu pełnym kalendarzem roboczym organizacji.

Koniec roku i sprawdzenie ostatniego dnia
Dla daty w A2 koniec jej roku kalendarzowego możesz wyznaczyć tak:
=NR.SER.OST.DN.MIES(A2;12-MIESIĄC(A2))
Jeśli A2 wskazuje czerwiec, MIESIĄC daje 6, a przesunięcie wynosi sześć miesięcy. Wybranym miesiącem jest grudzień, więc wynik to 31 grudnia tego samego roku. To rok kalendarzowy; firma z innym rokiem rozliczeniowym potrzebuje własnej reguły.
Dla komórki zawierającej samą datę, bez godziny, możesz sprawdzić warunek końca miesiąca:
=A2=NR.SER.OST.DN.MIES(A2;0)
Wynik logiczny mówi, czy obie wartości są równe. Przy znaczniku czasu trzeba osobno ustalić, jak traktować część godzinową. Samo wyświetlenie daty bez godziny nie usuwa tej części z wartości. W haśle DZIEŃ pokazuję natomiast pobieranie samego numeru dnia.
Czego pilnować w argumentach
Microsoft wskazuje, że niecałkowita liczba miesięcy jest obcinana do części całkowitej. Ja w takim raporcie podaję całe miesiące jawnie, żeby zapis nie sugerował przesunięcia o „pół miesiąca”. Funkcja wybiera miesiąc, a nie interpoluje termin między dwiema datami.
Nie opieram danych wejściowych na niejednoznacznym tekście. Używam komórki z poprawną datą albo DATA. Przy błędzie sprawdzam argument, zakres dat i pochodzenie importu. Obsługa błędu powinna wynikać z ustaleń o danych, a nie jedynie usuwać widoczny komunikat.
Zwróć również uwagę na treść pytania. Jeśli potrzebujesz przesunięcia konkretnej daty o miesiące, a nie końca miesiąca, sprawdź odpowiednią funkcję przesuwania dat. Do porównań tygodniowych przejdź do NUM.TYG i ISO.NUM.TYG. Dobór okresu powinien wynikać z definicji raportu.
Ćwiczenie z końcem lutego
Wprowadź datę 15 lutego 2024 oraz 15 lutego 2025 przez DATA. Dla obu wyznacz koniec miesiąca i początek kolejnego. Oczekiwane pary to 29 lutego i 1 marca 2024 oraz 28 lutego i 1 marca 2025. Wyjaśnij wynik, odwołując się do miesiąca i roku.
Następnie opisz, czy potrzebujesz daty kalendarzowej, granicy filtrowania czy dnia roboczego. To trzy różne wymagania, nawet gdy w zwykłym miesiącu dają podobnie wyglądające wyniki. Ja uznałbym ćwiczenie za skończone, gdy potrafisz wybrać właściwy wariant i nazwać jego ograniczenia.
Najważniejsze w pigułce
Jaka jest polska nazwa EOMONTH?
NR.SER.OST.DN.MIES. Nazwa NR.KONIEC.MIES w starszej wersji hasła była błędna; dotychczasowy adres strony pozostaje zachowany.
Co oznacza zero w NR.SER.OST.DN.MIES?
Koniec miesiąca daty przekazanej jako pierwszy argument. To miesiąc daty odniesienia, który nie musi być miesiącem dzisiejszym.
Czy koniec miesiąca jest zawsze dniem roboczym?
Nie. Do wariantu poniedziałek-piątek można połączyć funkcję z DZIEŃ.ROBOCZY i przekazać własną listę dni wolnych. Inny weekend wymaga odpowiedniego kalendarza.
Przy pracy nad artykułem użyto w zautomatyzowany sposób sztucznej inteligencji. Jeśli też chcesz tak umieć, sprawdź ten projekt.
