Hehe, no właśnie. Niedawno się nad tym głowiłam, a to taka prosta sprawa (choć nie na pierwszy rzut oka). Potrzebowałam tego w wielu sytuacjach: liczenie średnich kosztów z określonych miesięcy, uniwersalny grafik czasu pracy, w którym chciałam, aby na podstawie podania miesiąca, wyświetlały się wszystkie dni danego miesiąca i takie tam.
Pierwszy dzień miesiąca łatwo ustalić: zawsze dzień = 1. Z ostatnim dniem jest gorzej, ponieważ miesiące mają różną liczbę dni, a luty to już w ogóle (właśnie, ile dni ma w tym roku? Odpowiedź na końcu artykułu:))!
Dziś pokażę wam 2 sposoby na rozwiązanie tego problemu. Oczywiście jest ich więcej, jednak moje są dość łatwe. Zobaczycie 🙂
Będę chciała ustalić pierwsze dni następujących miesięcy (na formatce):
Tak, jak pisałam, pokażę wam 2 metody na wskazanie ostatniego dnia miesiąca. Obie są bardzo podobne – wybierzcie sobie tę, która wam bardziej przypadnie do gustu. Ponieważ obie oparte są o funkcję DATA, omówię ją teraz krótko.
Funkcja DATA
Funkcja ta jest megaprosta i megaprzydatna. Ma 3 argumenty, takie, jak każda data ma, czyli:
- Rok,
- Miesiąc,
- Dzień.
Przykładowo taki zapis:
=DATA(2016;01;19)
zwróci na taką datę: 2016-01-19. Oczywiście argumentami tej funkcji mogą być odwołania do komórek jak i funkcje zwracające liczby. Co potrzeba.
Wynikiem funkcji jest data, czyli tak na prawdę liczba naturalna. Przypomnę, że dla Excela daty to są liczby, a pierwsza data, jaką Excel (standardowo) rozpoznaje to 1900-01-01 i jest to liczba 1. Wspomniana data 2016-01-19 jest więc liczbą 42 388. Funkcja DATA zwraca takie właśnie liczby, tylko sformatowane od razu na daty.
Jeśli zatem chcemy ustalić pierwszy dzień lutego 2016, wystarczy wpisać tak:
=DATA(2016;2;1)
Zawsze więc wpiszemy rok i miesiąc, które nas interesują i jako ostatni argument – dzień – wpiszemy po prostu 1. Cała filozofia.
Ok, tyle tytułem wstępu, przejdźmy do ustalania ostatniego dnia miesiąca.
Metoda 1
Jedną z metod ustalania ostatniego dnia miesiąca jest ustalenie pierwszego dnia kolejnego miesiąca i… odjęcie 1. !!! Tyle 🙂 Pokazałam przed chwilą, jak ustalić pierwszy dzień miesiąca – banalnie. Odejmij 1 i masz wynik 🙂
Przykładowo chcę ustalić ostatni dzień sierpnia roku 2016. Muszę więc poznać pierwszy dzień września 2016 i odjąć od tego 1. Czyli:
=DATA(2016;9;1)-1
Funkcja zwróci mi datę 2016-09-01, czyli liczbę 42 614. Po odjęciu 1 otrzymam liczbę 42 613, czyli dzień wcześniej, czyli 2016-08-31.
Tadam!
To jedźmy do drugiej metody.
Metoda 2
Druga metoda również korzysta z funkcji DATA. Tutaj jednak wykorzystamy pewną właściwość tej funkcji.
Mianowicie, jeśli w ostatnim argumencie (dzień) wpiszemy dzień z danego miesiąca, to oczywiście funkcja zwróci nam datę z tym dniem. Co jednak, gdy np. dla marca 2015 wpiszemy tam liczbę 32? Tak, Excel zwróci nam kolejną datę, czyli 2015-04-01.
Idąc tym tropem, co będzie, gdy dla marca 2015 wpiszemy tam 0 (zero)? Właśnie tak – otrzymamy dzień poprzedni, czyli 2015-02-28.
I to jest druga metoda. Czyli:
=DATA(2015;3;0)
Zerowy dzień następnego miesiąca.
Parametryzowanie
Wracając do moich przykładów z formatki, tak wyglądają wyniki:
Można to oczywiście parametryzować. Skoro w kolumnie A mam wpisane miesiące, których ostatnie dni chcę poznać, nie będę przecież klepała 8 funkcji ręcznie. Odwołam się do komórek w kolumnie A i użyję odpowiednich funkcji do ustalenia odpowiedniego roku i miesiąca. Aby to zadziałało, w kolumnie A muszę mieć oczywiście daty, czyli de facto liczby. To, że daty te wyświetlają się jako nazwa miesiąca i rok, to już kwestia formatowania niestandardowego.
Jak więc mamy liczby w kolumnie A, możemy działać z funkcjami.
I tak, metoda 1., czyli odejmowanie 1 od pierwszego dnia kolejnego miesiąca można zapisać tak (komórka B4):
=DATA(ROK(A4);MIESIĄC(A4)+1;1)-1
W powyższej formule rok ustalany jest funkcją ROK, która pobiera dane z komórki A4. Miesiąc ustalany jest funkcją MIESIĄC, która również pobiera dane z komórki A4. Dzień jest to zawsze 1.
Dla metody 2. natomiast, wystarczy wpisać w C4 następującą formułę:
=DATA(ROK(A4);MIESIĄC(A4)+1;0)
Tutaj w drugim argumencie – miesiąc – dodajemy 1, aby uzyskać miesiąc następny. Dzień to zawsze 0 (zero).
Jak widzicie – metody są bardzo podobne i bazują na tej samej logice. Ostatni dzień miesiąca jest przed pierwszym dniem następnego miesiąca.
A odpowiedź na pytanie z początku wpisu to: w tym roku luty ma oczywiście 29 dni 🙂
I jak? Przyda wam się? Jestem ciekawa do czego tego użyjecie. Koniecznie napiszcie w komentarzach.
Aby uzyskać ostatni dzień miesiąca wystarczy do komórki np. A1 wpisać datę 01.01.2018. W dowolnej komórce wpisać formułę „EOMONTH(A1,0) i gotowe. A co najważniejsze nie trzeba zastanawiać się ile w danym roku luty ma dni
Pewnie, super pomysł! Dzięki za ten komentarz 🙂
Niestety Excel ma pewien problem z latami przestępnymi.
Proszę sprawdzić wynik dla roku 1900. Wg. Excela (1900/03/01)-1=(1900/02/29).
Dla większości z nas nie ma to znaczenia, ale jak ktoś zajmuje się analizą historyczną to już może być pewien problem. 😀
Tak… ten błąd na szczęście występuje tylko w 1900 roku i jest z nami w Excelu tylko po to, żeby zachować spójność z Lotusem… (którego nawet na oczy nigdy nie widziałam, takie to stare ;)).
Dziękuję za cenny komentarz!
Cześć, a jak zrobić by taki ostatni dzień miesiąca był zaznaczany poprzez formatowanie warunkowe? Mam daty w formacie dd.mm.rrrr.
Hej, przychodzi mi do głowy sprawdzenie każdej daty czy jak się doda do niej 1, to dzień od nowej daty będzie = 1. Jeśli tak – data jest ostatni dniem miesiąca.