Kategorie szkoleń | Egzaminy | Kontakt
  • 6
  • 4
  • 193

Czy jest formuła wyświetlająca liczbę dni w danym miesiącu?

Wiem, że problem ten można rozwiązać za pomocą tabeli pomocniczej i funkcji "wyszukaj.pionowo". Jednak w przypadku lutego pojawia się problem. Może można to zrobić prościej?

Patrycja_Kwinta
  • Zapytał
  • @ Patrycja_Kwinta | 10.12.2014
    • 3
    • 0
    • 4
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedzi (6)

  • 23

Pani Patrycjo.

Jedną z możliwości jest wykorzystanie funkcji DZIEŃ w połączeniu z funkcją DATA oraz ROK i MIESIĄC.

Przykład:

W komórce A1 mam datę 2014-02-10, a chcę Excela zmusić do wyświetlenia informacji o liczbie dni w tym miesiącu (lutym).

Wpisuję funkcję:

=DZIEŃ(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1)

ta funkcja "rozbiera" datę z komórki A1 na części składowe, a potem z rozebranych części "składa" ją z powrotem i wyciąga numer ostatniego dnia miesiąca, co jest równoznaczne z liczbą dni.

Funkcja DATA składa datę z kawałków: ROK(A1) to 2014, MIESIĄC(A1) to 2 (luty) - ale dodałem 1, żeby wyszedł kolejny miesiąc: 3 (marzec). Ostatnim elementem funkcji DATA jest numer dnia - tutaj wpisałem 1, żeby uzyskać pierwszy dzień miesiąca następującego po lutym. Wynikiem funkcji DATA jest 2014-03-01.

Od wyniku funkcji DATA odejmuję 1, dzięki czemu funkcja wyświetli mi ostatni dzień lutego. Czyli 2014-02-28.

Wszystko to jest pozagnieżdżane w funkcji DZIEŃ, która wyświetli w tym przypadku liczbę 28 - numer ostatniego dnia lutego, czyli liczbę dni w lutym.

Proszę sprawdzić to na innych datach. Taki zapis jest w stanie uwzględnić też lata przestępne.

Pozdrawiam.
Andrzej Słodownik.

 

PS. A teraz spodziewam się wysypki alternatywnych rozwiązań kolegów. :-)

  • Odpowiedział
  • @ | 10.12.2014
  • TRENER ALTKOM AKADEMII
Komentarze
Dzięki tej funkcjonalności możemy zastosować funkcję
=DATA(ROK(A1);MIESIĄC(A1)+2;DZIEŃ(1))-1, która zwraca ostatni dzień miesiąca (z uwzględnieniem lat przestępnych) - zastępuje zatem funkcje =NR.SER.OST.DN.MIES(data_początkowa; miesiące) dostępne od wersji exel 2007
oraz =eomonth() dostępną wcześniej.
Skomentował : @ Agnieszka_Kielar ,03.02.2015
  • 4
  • 0
  • 0
  • 21

Można użyć funkcji:

=NR.SER.OST.DN.MIES(data_początkowa; miesiące)

W starszych Excelach niż 2010 funkcja nosiła nazwę:

=eomonth()

Argumenty tej funkcji to:

              data_początkowa  - data, względem której obliczamy ostatni dzień miesiąca.

              miesiąc - liczba miesięcy przed lub po dacie określonej w argumencie data_początkowa.

Wykorzystanie funkcji:

                =nr.ser.ost.dn.mies( dziś(); -1) - ostatni dzień wcześniejszego miesiąca niż aktualny.

                =nr.ser.ost.dn.mies( dziś(); 0) - ostatni dzień aktualnego miesiąca.

                =nr.ser.ost.dn.mies( dziś(); 3) - ostatni dzień miesiąca o trzy miesiące w przyszłość od aktualnego.

Oczywiście zamiast funkcji dziś() możemy tutaj użyć adresu komórki z datą, względem której liczymy ostatni dzień miesiąca.

  • Odpowiedział
  • @ | 11.12.2014
  • TRENER ALTKOM AKADEMII
Komentarze
  • 11

Witam.

Dodam tylko, że aby wyświetlić tylko liczbę dni w miesiącu, formuła może mieć postać:

=dzień(nr.ser.ost.dn.mies(dziś();0))

Dla wersji angielskiej Excela z amerykańskimi ustawieniami regionalnymi:

=day(eomonth(today(),0)) 

Wynikiem tej funkcji będzie liczba dni w aktualnym miesiącu.

Pozdrawiam.
Michał Zieliński.

  • Odpowiedział
  • @ | 11.12.2014
  • TRENER ALTKOM AKADEMII
Komentarze
  • 6

Lub funkcja VBA:

Function LiczbaDniMiesiaca(Rok As Long, Miesiac As Long) As Long
    LiczbaDniMiesiaca = Day(DateSerial(Rok, Miesiac + 1, 0))
End Function
  • Odpowiedział
  • @ | 05.01.2015
  • TRENER ALTKOM AKADEMII
Komentarze
  • 0

Chyba powinno być jeszcze "-1" aby wskazać liczbę dni bieżącego miesiąca, o tak: 

Function LiczbaDniMiesiaca(Rok As Long, Miesiac As Long) As Long
    LiczbaDniMiesiaca = Day(DateSerial(Rok, Miesiac + 1, 0)-1)
End Function
Piotr_Wójcik_7euq
  • Odpowiedział
  • @ Piotr_Wójcik_7euq | 08.01.2022
    • 0
    • 0
    • 0
  • 0

Chyba powinno być jeszcze "-1" aby wskazać liczbę dni bieżącego miesiąca, o tak: 

Function LiczbaDniMiesiaca(Rok As Long, Miesiac As Long) As Long
    LiczbaDniMiesiaca = Day(DateSerial(Rok, Miesiac + 1, 0)-1)
End Function
Piotr_Wójcik_7euq
  • Odpowiedział
  • @ Piotr_Wójcik_7euq | 08.01.2022
    • 0
    • 0
    • 0