Start Hilfe und Support Microsoft Office EXCEL 2010 VBA: Den letzten Tag des Monats bestimmen

EXCEL 2010 VBA: Den letzten Tag des Monats bestimmen

E-Mail PDF

Funktion zur Bestimmung des jeweiligen Monatsultimos

Aufgabenstellung

Im Folgenden wird eine Funktion vorgestellt, die bei einem Datum (Date), das an die Funktion übergeben wird, den Monatsultimowert/das Monatsultimo, also den letzten gültigen Tag im Monat, bestimmt. Die Funktion hört auf den Namen Monatsletzter. Diese Funktion liefert als Ergebnis einen Date-Datentyp.

VBA-Code Monatsletzter

Alternative 1

Function Monatsletzter(ByVal vDatum As Date) As Date

  ' Die Idee dieser Funktion ist, dass man mit der VBA-Funktion das übergebene Datum um
  ' um einen Monat erhöht, den Tag auf dem Monatsanfang legt und von diesem Datum dann
  ' wiederum einen Tag abzieht, so dass man auf das Monatsultimo gelangt.

  ' Bsp.: Datum = "15.02.2013"
  ' Das Datum wird durch die Funktion "01." & Month(vDatum) + 1 & "." & Year(vDatum)
  ' umgewandelt auf das Datum "01.03.2013", von diesem Datum wird ein Tag abgezogen,
  ' somit landet man auf dem "28.02.2013".

  ' Für den Dezember muss eine Weiche einbauen. Man setzt das Datum auf den 01.01. und
  ' erhöht das Jahr um ein Jahr

  ' Bsp.: Datum = "15.12.2012"
  ' Die Funktion "01." & Month(vDatum) + 1 & "." & Year(vDatum) macht aus diesem Datum
  ' den "01.01.2013", von diesem Wert wird wiederum ein Tag abgezogen, so dass man
  ' auf den "31.12.2012" kommt.

  If Month(vDatum) = 12 Then
    Monatsletzter = DateAdd("d", -1, "01.01." & Year(vDatum) + 1)
  Else
    Monatsletzter = DateAdd("d", -1, "01." & Month(vDatum) + 1 & "." & Year(vDatum))
  End If
End Function

Alternative 2

Function Monatsletzter(ByVal vDatum As Date) As Date

  ' Diese Funktion baut auf DateSerial auf. Dabei wird die folgende Idee verwendet:
  ' DateSerial erwartet als Parameter das Jahr, den Monat und den Tag und kann auch
  ' mit diesen Angaben rechnen. Man kann auf die übergebenen Werte beliebige Werte
  ' hinzuaddieren, daraus wird dann ein neues Datum generiert. So kennt diese Funktion
  ' auch den Monat 14, das wäre der Februar des Folgejahres. In dieser Funktion
  ' wird einfach auf Basis des übergebenen Datum der Monat um einen Monat erhöht.
  ' Der Tag wird auf 0 gesetzt. Der 0. ist somit einfach ein Tag vor dem 1. und damit
  ' das Monatsultimo des Vormonats.
  ' Beispeil: Übergeben wird der "21.12.2013", daraus macht DateSerial den "00.13.2013",
  ' Das entspricht dann dem "31.12.2013", und das wird dann auch zurückgegeben.

  Monatsletzter = DateSerial(Year(vDatum), Month(vDatum) + 1, 0)
End Function

Letzter Wochentag im Monat mit der Funktion LetzterWochentag

Nun können wir das Ultimodatum eines Monats ermitteln, dann ist ein Leichtes, auch den zugehörigen Wochentag herauszubekommen. Die Funktion LetzterWochentag baut auf die Funktion Monatsletzter auf und ermittelt zu diesem Datum den Wochentag. Es wird ein String zurückgegeben.

VBA-Code LetzterWochentag im Monat

Function LetzterWochentag(ByVal vDatum as Date) As String

  ' Variablendeklaration
  Dim dMonatsultimo As Date

  Dim sWochentag As String
  Dim lWochentag As Long

  dMonatsultimo = Monatsletzter(vDatum) ' Ermittlung des Monatsultimos
  lWochentag = Weekday(dMonatsultimo) ' Ermittlung des Wochentages mit der Standardfunktion von

                                      ' VBA "Weekday"

  ' Weekday liefert einen Zahlenwert, die in VBA als Konstanten zur Verfügung stehen, auf Basis

  ' dieser Werte wird das Ergebnis in einen String umgewandelt und der Variablen sWochentag
  ' zugewiesen
  Select Case lWochentag

    Case vbMonday: sWochentag = "Montag"
    Case vbTuesday: sWochentag = "Dienstag"
    Case vbWednesday: sWochentag = "Mittwoch"
    Case vbThursday: sWochentag = "Donnerstag"
    Case vbFriday: sWochentag = "Freitag"
    Case vbSaturday: sWochentag = "Samstag"
    Case vbSunday: sWochentag = "Sonntag"
  End Select

  LetzterWochentag = sWochentag ' Übergabe des Rückgabewertes an die Funktion
End Function


Zuletzt aktualisiert am Montag, den 04. November 2013 um 18:38 Uhr  


Machen Sie mit

Sie bewegt ein Thema rund um unser Dorf, das Sie gerne mit anderen diskutieren möchten? Das kommt auf unsere Internetseite von Happerschoß. Melden Sie sich, schreiben Sie eine Mail direkt über den Kontaktbereich oder natürlich auch über Info@happerschoss.net.