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

DateDiff v. DATEDIF

Forumthread: DateDiff v. DATEDIF

DateDiff v. DATEDIF
09.06.2006 20:21:49
Albin
Hi,
kann mir jemand sagen, warum folgendes Makro ein falsches Ergebnis ausgibt?
Das Ergebnis ist 47 und das ist falsch!

Sub Makro2()
Dim GebTag As Date, Heute As Date
Dim Alter
GebTag = CDate("12.06.1959")
Heute = Date
Alter = DateDiff("yyyy", GebTag, Date)
MsgBox Alter
End Sub

Die Formel im Tabellenblatt liefert das richtige Ergebnis, nämlich 46.
In N3 steht wieder der 12.06.1959
=DATEDIF(N3;HEUTE();"Y")
Mein Problem ist, dass ich ein _richtiges_ Ergebnis per Makro brauche.
Ratlose Grüße
A.
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DateDiff v. DATEDIF
09.06.2006 20:45:14
Ramses
Hallo
Aus der Hilfe:
"...Wird der 31. Dezember mit dem 1. Januar des unmittelbar folgenden Jahres verglichen, gibt DateDiff für Jahr ("yyyy") den Wert 1 zurück, obwohl nur ein Tag vergangen ist...."
Daraus lässt sich folgendes ableiten
Alter = DateDiff("yyyy", GebTag, Date)-1
Gruss Rainer
Anzeige
AW: DateDiff v. DATEDIF
09.06.2006 21:07:24
Erich G.
Hallo Rainer,
probier mal
Sub Makro2()
Dim GebTag As Date, Heute As Date
Dim Alter
GebTag = Date - 366
MsgBox GebTag
Alter = DateDiff("yyyy", GebTag, Date)
MsgBox Alter
Alter = DateDiff("yyyy", GebTag, Date) - 1
MsgBox Alter
With Range("IV1")
.Formula = "=DATEDIF(""08.06.2005"",""09.06.2006"",""y"")"
Alter = .Value
.ClearContents
End With
MsgBox Alter
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: DateDiff v. DATEDIF
09.06.2006 21:14:13
Ramses
Hallo Erich
Du musst natürlich prüfen ob das Geb.-Datum NACH oder VOR dem aktuellen Datum liegt um das korrekte Alter zu berechnen.
Im genannten Beispiel, liegt das Geburtsdatum NACH dem aktuellen Datum, also in der Zukunft.
Daher -1 Jahr ;-)
Gruss Rainer
AW: DateDiff v. DATEDIF
10.06.2006 05:57:27
schauan
Hallo Rainer,
das versteh ich jetzt nicht ganz. 1959 liegt doch vor dem aktuellen Datum oder sehe ich da was falsch? Und in Erich's code liegt der Tag auch über 1 Jahr zurück, (366 Tage). Da sieht man, dass man nicht einfach -1 schreiben kann, denn 366 Tage sollten schon 1 ergeben. Siehe auch meine Erläuterungen mit den Jahreszahlen 05 und 06 in meiner ersten Antwort. Die originale VBA-Funktion müsste hier wohl eher CountYearFigures heissen und nicht DateDif ...
Ich habe nun nicht den Text im vbarchiv durchgelesen, ein passendes codebeispiel findet man hier:
http://www.cpearson.com/excel/datedif.htm

Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
AW: DateDiff v. DATEDIF
09.06.2006 22:31:15
Albin
Hi,
vielen Dank für die zahlereichen Antworten. Damit komme ich weiter.
Gruß
Albin
AW: DateDiff v. DATEDIF
09.06.2006 21:01:48
schauan
Hallöchen,
im VBA wird die Differenz der Jahre gebildet ohne den Rest zu berücksichtigen. z.B. ist die Differenz zwischen 31.12.05 und 09.06.06 auch ein Jahr, =06-05, und die Differenz vom 01.01.06 bis zum 09.06.06 ist 0 =06-06
-siehe auch die Hilfe:
Wird der 31. Dezember mit dem 1. Januar des unmittelbar folgenden Jahres verglichen, gibt DateDiff für Jahr ("yyyy") den Wert 1 zurück, obwohl nur ein Tag vergangen ist.

Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
Und der Unterschied zu meiner Antwort ?? o.w.T.
09.06.2006 21:03:39
Ramses
...
AW: Und der Unterschied zu meiner Antwort ?? o.w.T.
10.06.2006 05:32:39
schauan
Hallo Rainer,
die Reihenfolge der Antworten zeigt nicht, wann ein Beitrag begonnen wurde zu schreiben sondern nur das Absenden des selbigen. So ist es also möglich, dass zwischenzeitlich andere Antworten eintrudeln, das müsstest Du als Stammgast eigentlich wissen ;-)
Na ja, meistens geht es da nur um Sekunden oder ein Minütchen, aber manchmal ruft einen auch die Frau oder andere wichtige Dinge passieren zwischendurch ...
Anzeige
AW: DateDiff v. DATEDIF
09.06.2006 21:13:31
Erich G.
Hallo Albin,
dazu findet sich was bei
https://www.herber.de/mailing/012898h.htm
und
http://www.vbarchiv.net/archiv/tipp_1308.html
Herbers Möglichkeit könnstest du auch so einsetzen:
Sub Makro2()
Dim GebTag As Date
Dim Alter
GebTag = CDate("12.06.1959")
With Range("IV2")
.Formula = "=DATEDIF(""" & CStr(GebTag) & """,""" & CStr(Date) & """,""y"")"
Alter = .Value
.ClearContents
End With
MsgBox Alter
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: DateDiff v. DATEDIF
09.06.2006 21:15:49
Ramses
Hallo Erich
"...Herbers Möglichkeit könnstest du auch so einsetzen:..."
Vorsicht !
Wenn Du "UsedRange" in deinem Code verwendest, dann geht dein Bereich bis zum nächsten öffnen der Mappe nun bis IV2 :-)
Gruss Rainer
;
Anzeige

Infobox / Tutorial

DateDiff vs. DATEDIF in Excel: Unterschiede und Lösungen


Schritt-für-Schritt-Anleitung

  1. Erstelle ein neues Makro: Öffne den Visual Basic for Applications (VBA) Editor in Excel (ALT + F11) und füge ein neues Modul hinzu.

  2. Füge den folgenden Code ein:

    Sub Makro2()
       Dim GebTag As Date, Heute As Date
       Dim Alter As Integer
       GebTag = CDate("12.06.1959") ' Geburtsdatum
       Heute = Date
       Alter = DateDiff("yyyy", GebTag, Heute) - IIf(Date < DateSerial(Year(Heute), Month(GebTag), Day(GebTag)), 1, 0)
       MsgBox Alter
    End Sub

    Diese Anpassung berechnet das Alter korrekt, indem sie überprüft, ob das Geburtsdatum bereits im aktuellen Jahr erreicht wurde.

  3. Führe das Makro aus: Klicke im VBA-Editor auf F5 oder schließe den Editor und führe das Makro aus Excel.


Häufige Fehler und Lösungen

  • Fehler: DATEDIF funktioniert nicht

    • Überprüfe die Schreibweise der Funktion. Achte darauf, dass die Parameter korrekt angegeben sind.
  • Fehler: DateDiff gibt falsches Ergebnis

    • Der Fehler tritt häufig auf, wenn das Geburtsdatum und das aktuelle Datum am Jahreswechsel liegen. In diesem Fall sollte die Differenz um 1 Jahr verringert werden, wenn das Geburtsdatum nach dem aktuellen Datum liegt.
  • Fehler: DATEDIF nicht vorhanden

    • Diese Funktion kann in einigen Excel-Versionen nicht verfügbar sein. Stelle sicher, dass du eine aktuelle Version von Excel verwendest.

Alternative Methoden

  • Verwendung von DATEDIF: Wenn du die Funktion DATEDIF verwenden möchtest, gehe wie folgt vor:

    =DATEDIF(A1, HEUTE(), "Y")

    Hierbei ist A1 die Zelle, die das Geburtsdatum enthält.

  • VBA-DATEDIFF-Funktion: Du kannst auch die DateDiff-Funktion in VBA verwenden, jedoch mit dem oben genannten Code, um das Alter korrekt zu berechnen.


Praktische Beispiele

  1. Berechnung des Alters: Angenommen, das Geburtsdatum steht in Zelle N3:

    =DATEDIF(N3, HEUTE(), "Y")
  2. Verwendung in einem VBA-Skript:

    Sub BerechneAlter()
       Dim GebTag As Date
       GebTag = CDate("12.06.2000")
       MsgBox "Alter: " & DateDiff("yyyy", GebTag, Date) - IIf(Date < DateSerial(Year(Date), Month(GebTag), Day(GebTag)), 1, 0)
    End Sub

Tipps für Profis

  • Verwende VBA für komplexe Berechnungen: Wenn du regelmäßig mit Datumsberechnungen arbeitest, kann die Verwendung von VBA viel Zeit sparen.

  • Testen der Funktionen: Teste deine DATEDIF- und DateDiff-Formeln in verschiedenen Szenarien, insbesondere um den Jahreswechsel herum.

  • Beachte regionale Datumsformate: Stelle sicher, dass die Datumsformate in deinem Excel-Dokument mit den regionalen Einstellungen übereinstimmen, um Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Warum gibt DateDiff manchmal falsche Ergebnisse zurück? DateDiff kann falsche Ergebnisse zurückgeben, wenn das Geburtsdatum und das aktuelle Datum am Jahreswechsel liegen. Es ist wichtig, die Berechnung entsprechend anzupassen.

2. Wie kann ich DATEDIF in VBA verwenden? Du kannst DATEDIF in VBA verwenden, indem du die Formel in eine Zelle schreibst und dann den Wert ausliest, wie im Beispiel oben beschrieben.

3. Was tun, wenn DATEDIF nicht verfügbar ist? Wenn DATEDIF in deiner Excel-Version nicht vorhanden ist, kannst du stattdessen DateDiff verwenden oder die DATEDIF-Formel in einer Zelle nutzen.

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