Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Funktion "EDATUM" in VBA nachcoden!

Forumthread: Funktion "EDATUM" in VBA nachcoden!

Funktion "EDATUM" in VBA nachcoden!
Dennis
Guten Morgen zusammen!
Ich hab folgendes Problem: Für diverse Berechnungen brauche ich die Funktion EDATUM. Dafür muß ich das Standard-AddIn "Analyse Funktionen" einbinden bzw. es muß von der Office-CD installiert sein.
Das Programm wird an verschiedene Berater geschickt, leider hat nicht jeder dieses AddIn "physikalisch" installiert.
Ich würde jetzt gerne ein Modul schreiben, dass die EDATUM-Funktion nachbildet, so dass ich diese nicht einbinden muss und jeder meine Funktion benutzen kann.
Wer weiß Rat? Hat sowas schonmal jemand vor mir erledigt?
Gruß
Dennis
Anzeige
AW: Funktion "EDATUM" in VBA nachcoden!
Matthias
Hallo Dennis,

Function EDat(d As Date, m As Integer) As Date
EDat = DateSerial(Year(d), Month(d) + m, Day(d))
End Function

Gruß Matthias
Das wars schon?
19.04.2004 09:38:33
Dennis
Hallo Matthias,
was, das wars schon? Wahnsinn, vielen Dank, das funktioniert wunderbar! Jetz hab ich so einiges an Problemen gelöst.
Gruß
Dennis
Anzeige
Ich denke das ist es nicht
Jörg
Hallo Matthias,
in A1 den 31.03.04
=DATUM(JAHR(A1);MONAT(A1)-1;TAG(A1)) ergibt den 02.03.04
=EDATUM(A1;-1) ergibt richtig den 29.02.04
Leider bleibt Excel nicht im Monat und zeigt den Monatsletzten an, sondern zählt die verbleibenden Tage obendrauf!
Gruss Jörg
AW: Du hast recht - schade - o.T.
Matthias
-
AW: Du hast recht - schade - o.T.
Matthias
Hallo Jörg,
aber so vielleicht:

Function EDat(d As Date, m As Integer) As Date
Dim d0 As Date
d0 = CDate(DateSerial(Year(d), Month(d) + m, Day(d)))
If Month(d0) <> (Month(d) + m) Mod 12 Then d0 = d0 - Day(d0)
EDat = d0
End Function

Gruß Matthias
Anzeige
Nee, so gehts auch nicht!
Dennis
Hallo,
Matthias, Deine Funktion:

Function EDat(d As Date, m As Integer) As Date
Dim d0 As Date
d0 = CDate(DateSerial(Year(d), Month(d) + m, Day(d)))
If Month(d0) <> (Month(d) + m) Mod 12 Then d0 = d0 - Day(d0)
EDat = d0
End Function

In A1: 31.12.04
Deine Funktion mit -3 Monaten liefert 30.11.03, edatum liefert richtig 31.12.03!
Schade, ich dachte erst, Deine Funktion würde funktionieren.
Hast Du vielleicht noch eine andere Idee?
Dennis
Anzeige
AW: Nee, so gehts auch nicht!
Jörg
Hallo Dennis,
ich habe hier was gefunden
http://www.excelformeln.de/formeln.html?welcher=6
vielleicht ist Matthias so freundlich daraus eine VBA Funktion zu schreiben, dafür reichen meine VBA Kenntnisse nämlich nicht aus.
Gruss Jörg
Anzeige
Warum kommt hier ein Compiler-Fehler?
19.04.2004 10:58:21
Dennis
Also ich habe die Beispielfunktion von http://www.excelformeln.de/formeln.html?welcher=6 (ganz unten) mal in VBA übernommen. Aber warum kommt hier die Fehlermeldung "

Sub oder 

Function nicht definiert" und zwar bei der Stelle "Min" ?

Function EDat(d As Date, m As Integer) As Date
EDat = DateSerial(Year(d), Month(d) + m, Min(Day(d), Day(DateSerial(Year(d), 1 + Month(d) + m, 0))))
End Function

Dennis
Anzeige
PS:
19.04.2004 11:03:03
Dennis
PS:
Die für EDATUM in VBA nachzubildene Formel lautet:
Wobei A1: Ausgangsdatum, D2: Anzahl Monate (In Funktion mit den Variablen d und m zu ersetzen)
=DATUM(JAHR(A1);MONAT(A1)+D2;MIN(TAG(A1);TAG(DATUM(JAHR(A1);1+MONAT(A1)+D2;))))
Die Formel funktioniert genau wie EDATUM, muß aber jetzt in ein VBA-Modul.
Das muß doch machbar sein! (Leider nicht von mir ;) )
Dennis
Anzeige
Noch offen o.T.
Matthias
-
Ich habs, das ist die Lösung! EDATUM nachgecodet
Dennis
Hi,
ich hab jetzt endlich die Lösung. Das so etwas nie jemand vor mir gebraucht hat finde ich schon komisch. Hier ist der Code:

Function EDat(d As Date, m As Integer) As Date
EDat = DateSerial(Year(d), Month(d) + m, Application.WorksheetFunction.Min(Day(d), Day(DateSerial(Year(d), 1 + Month(d) + m, 0))))
End Function

Schöne Grüße
Dennis
Anzeige
Teamwork war sehr lehrreich. Danke o.T.
Jörg
;
Anzeige
Anzeige

Infobox / Tutorial

EDATUM-Funktion in VBA selbst programmieren


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu VBA:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Neues Modul erstellen:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Code für die EDATUM-Funktion einfügen:

    • Kopiere den folgenden Code und füge ihn in das Modul ein:
    Function EDat(d As Date, m As Integer) As Date
       EDat = DateSerial(Year(d), Month(d) + m, Application.WorksheetFunction.Min(Day(d), Day(DateSerial(Year(d), 1 + Month(d) + m, 0))))
    End Function
  4. Speichern:

    • Speichere das Modul und schließe den VBA-Editor.
  5. EDATUM-Funktion verwenden:

    • Du kannst die Funktion in Excel wie folgt verwenden:
      =EDat(A1, D2)
    • Hierbei ist A1 das Ausgangsdatum und D2 die Anzahl der Monate, die du hinzufügen oder abziehen möchtest.

Häufige Fehler und Lösungen

  • Compiler-Fehler bei der Verwendung von Min:

    • Wenn Du die Fehlermeldung "Sub oder Function nicht definiert" bekommst, stelle sicher, dass Du die Application.WorksheetFunction.Min korrekt verwendest.
  • Falsches Ergebnis:

    • Wenn das Ergebnis nicht wie erwartet ausfällt, überprüfe, ob das Ausgangsdatum korrekt ist und ob die Anzahl der Monate richtig angegeben wurde.

Alternative Methoden

Wenn Du die EDATUM-Funktion nicht in VBA verwenden möchtest, kannst Du auch die folgende Excel-Formel verwenden:

=DATUM(JAHR(A1);MONAT(A1)+D2;MIN(TAG(A1);TAG(DATUM(JAHR(A1);1+MONAT(A1)+D2;))))

Diese Formel funktioniert ähnlich wie die EDATUM-Funktion und kann direkt in einem Excel-Arbeitsblatt verwendet werden.


Praktische Beispiele

  • Beispiel 1:

    • Ausgangsdatum in A1: 31.03.2023, Monate in D2: -1
    • Formel: =EDat(A1, D2) gibt 28.02.2023 zurück.
  • Beispiel 2:

    • Ausgangsdatum in A1: 31.12.2023, Monate in D2: -3
    • Formel: =EDat(A1, D2) gibt 30.09.2023 zurück.

Tipps für Profis

  • Verwende benutzerdefinierte Formate: Du kannst das Datum in einem benutzerdefinierten Format anzeigen lassen, um die Lesbarkeit zu erhöhen.

  • Fehlerbehandlung in VBA: Füge Fehlerbehandlungsroutinen in deine VBA-Funktion ein, um unerwartete Eingaben zu behandeln.

  • Optimierung der Funktion: Wenn Du oft mit großen Datenmengen arbeitest, könnte es hilfreich sein, die Funktion zu optimieren, um die Performance zu verbessern.


FAQ: Häufige Fragen

1. Was ist die EDATUM-Funktion?
Die EDATUM-Funktion in Excel gibt das Datum zurück, das eine bestimmte Anzahl von Monaten vor oder nach einem angegebenen Datum liegt.

2. Wie kann ich die EDATUM-Funktion in VBA nachbilden?
Du kannst eine benutzerdefinierte Funktion in VBA erstellen, wie im Tutorial beschrieben, um die EDATUM-Funktion nachzubilden.

3. Welche Excel-Version benötige ich, um diese Funktion zu verwenden?
Die beschriebenen Schritte sollten in den meisten modernen Excel-Versionen funktionieren, einschließlich Excel 2013, 2016, 2019 und Microsoft 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige