Microsoft Excel

Herbers Excel/VBA-Archiv

DateDiff Funktion berechnet falsche Lösung

Betrifft: DateDiff Funktion berechnet falsche Lösung von: j.r.
Geschrieben am: 31.07.2014 13:41:14

Hallo zusammen,

in einem Makro möchte ich u.a. die zeitliche Differenz (in Monaten) zwischen einem bestimmten Datum in der Vergangenheit und dem aktuellen spricht heutigen Datum berechnen.

Hierfür habe ich folgenden Auszug aus dem Makro:

Wb2.Sheets(1).Cells(k, 5).Value = DateDiff("m", Wb2.Sheets(1).Cells(k, 4).Value,_ Wb2.Sheets(1).Range("B2").Value) 'Anzahl Monate Account aktiv_
Wb2.Sheets(1).Cells(k, 5).NumberFormat = "0"

Erläuterungen:

Wb2.Sheets(1).Cells(k, 4).Value ' in dieser Zelle steht "22.01.2014"
Wb2.Sheets(1).Range("B2").Value 'in dieser Zelle steht heutiges Datum (=HEUTE())

Als Ergebnis spuckt mir das Makro 20 Monate Differenz aus.

Wo liegt der Fehler?

Vielen Dank

Gruß
j.r.

  

Betrifft: AW: DateDiff Funktion berechnet falsche Lösung von: Mister-B
Geschrieben am: 31.07.2014 13:51:49

Hallo,

hast du dich vielleicht vertippt?

Es heisst "DateDif" und nicht "DateDiff". Außerdem bei mir sieht die Formel so aus:

=DATEDIF(D1;A1;"m")

A1 = Heute
D1 = Vergangenheit


Gruß
Martin


  

Betrifft: AW: DateDiff Funktion berechnet falsche Lösung von: j.r.
Geschrieben am: 31.07.2014 13:54:36

Nein, im VBE heißt es DateDiff()


  

Betrifft: AW: DateDiff Funktion berechnet falsche Lösung von: MiGre
Geschrieben am: 31.07.2014 13:57:55

Hallo j.r.!

Ich habe einmal eine ähnliche Berechnung in einer Funktion umgesetzt, vielleicht hilft Dir das weiter:

Function DateTest(ALT As Date, HEUT As Date)

    DateTest = DateDiff("m", ALT, HEUT, vbMonday, vbFirstFourDays)

End Function
ALT = der 22.01. in Deinem Beispiel
HEUT = das Vergleichsdatum (zB Zelle mit Heute())

Hoffe das hilft Dir!
Beste Grüße
MiGre


  

Betrifft: AW: DateDiff Funktion berechnet falsche Lösung von: ChrisL
Geschrieben am: 31.07.2014 14:07:15

Hi

Beispieldatei (reduziert auf das Problem) wäre hilfreich, weil der Code scheint mir OK.

Kann mir denken, dass es irgendwas mit den Datentypen zu tun hat z.B. Datum als Text. Oder Tabelle nicht aktualisiert (=HEUTE) oder die Schreibweise von Daten (z.B. Monat/Tag vertauscht) usw.

cu
Chris


  

Betrifft: AW: DateDiff Funktion berechnet falsche Lösung von: j.r.
Geschrieben am: 31.07.2014 15:17:43

Weiß jemand, wie man das Problem mit dem Datentyp "Text" gelöst bekommt?

Vielen Dank.

Gruß
j.r.


  

Betrifft: DateDiff von: Erich G.
Geschrieben am: 31.07.2014 15:33:49

Hi ?,
wo hst du welches Problem mit dem Datentyp "Text"? Geht's vielleicht ein wenig genauer?

Welcher Wert steht in Cells(k, 4)? Wie kommt der Wert zustande?
Welches Zahlenformat hat die Zelle Cells(k, 4)?

Wenn da bei dir 20 Monate rauskommen, müsste da der November 2012 auftauchen - 20 Monate vor heute. Hilft das ?

Eine Mini-Beispielmappe wäre sicher hilfreich.

By the way:
Wie wäre es mit einer Rückmeldung zu "Datumsformat ändern" in
https://www.herber.de/forum/messages/1373289.html
bzw.
https://www.herber.de/forum/archiv/1372to1376/t1373289.htm

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: DateDiff von: j.r.
Geschrieben am: 31.07.2014 15:47:25

Hallo,


Wb2.Sheets(1).Cells(k, 4).Value ' in dieser Zelle steht "22.01.2014"
Wb2.Sheets(1).Range("B2").Value 'in dieser Zelle steht heutiges Datum (=HEUTE())


  

Betrifft: nix Neues von: Erich G.
Geschrieben am: 31.07.2014 16:29:11

Hi,
das war jetzt aber nichts Neues und wenig Erhellendes. Die beiden Zeilen stehen hier schon ganz vorn im Thread.
Auf meine weiteren Fragen bist du gar nicht eingegangen. Schade. Das wird dir kaum helfen, eine Lösung zu erhalten.
Aber du hast ja die Möglichkeit, das noch nachzuholen...

Hier mal eine Mini-BeiSpielMappe, vielleicht könntest du sie um deine fehlerhaften Daten ergänzen?
https://www.herber.de/bbs/user/91816.xlsm

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: nix Neues von: j.r.
Geschrieben am: 31.07.2014 16:57:46

Ich habe den VBA Code unter

https://www.herber.de/bbs/user/91817.txt

eingefügt.

Vielen Dank im Voraus.

Gruß
j.r.


  

Betrifft: ausgesprochen zäh ... von: Erich G.
Geschrieben am: 31.07.2014 20:01:00

Hi Jens,
... gestaltet sich hier die Zusammenarbeit mit dir. :-(

"Hier mal eine Mini-BeiSpielMappe, vielleicht könntest du sie um deine fehlerhaften Daten ergänzen?"
Wäre das denn so schwer gewesen?
Ich erwarte nun, dass du in der kleinen Mappe eine Zeile mit Daten so ergänzt, dass da mit deinen Daten
(22.01.2014 bis heute) DateDiff() das Ergebnis 20 (Monate) liefert - wie in deiner Mappe.

Stattdessen postest du nun einen umfangreicheren Code, der nur weitere Fragen aufwirft.
Hier die für das Problem wohl wesentlichen Zeilen:

Wb1.Sheets(1).Range("S:S").Copy Destination:=Wb2.Sheets(2).Range("D:D") 'Creationdate
Da bleibt verborgen, was genau in Wb1.Sheets(1).Range("S:S"), dann in Wb2.Sheets(2).Range("D:D"), steht.

Wb2.Sheets(2).Cells(j, 5).Value = Wb2.Sheets(2).Cells(j, 4).Value
ändert nichts

Wb2.Sheets(2).Cells(j, 5).NumberFormat = "dd/mm/yyyy"
Wenn in Cells(j, 5) ein Text steht, ändert sich nichts an der Anzeige.
Wenn in Cells(j, 5) eine Zahl (ein Datum) steht, ändert sich die Anzeige???

Wb2.Sheets(1).Cells(k, 4).Value = Left(Wb2.Sheets(2).Cells(j, 5).Text, 10)
Wenn in Cells(j, 5) ein Text steht, kommen die ersten 10 Zeichen davon in Cells(k, 4).
Wenn in Cells(j, 5) eine Zahl (ein Datum) steht, kommt ein Text in Cells(k, 4) mit dem Aussehen TT.MM.JJJJ

Wb2.Sheets(1).Cells(k, 4).NumberFormat = "0"
ist wirkungslos.
Wenn in Cells(k, 4) ein Text steht, könnte man der Zelle auch das Format "0.00%" geben - ohne Wirkung.

Wb2.Sheets(1).Cells(k, 4).HorizontalAlignment = xlRight
Hier willst du wohl den Wert von Cells(k, 4) rechtsbündig anzeigen, damit er wie eine Zahl/ein Datum aussieht.
(Texte werden standardmäßig linksbündig angezeigt.)

Wb2.Sheets(1).Cells(k, 5).Value =
DateDiff("m", Wb2.Sheets(1).Cells(k, 4).Value, Wb2.Sheets(1).Range("B2").Value) 'Anz. Monate Account aktiv
DateDiff() erwartet als 2. und 3. Parameter jeweils ein Datum. Wenn in der Kette, die zu dem Text in Cells(k, 4) führt,
mal ein Datum steht - warum übergibst du nicht einfach dieses Datum an DateDiff()?
Wozu soll diese ganze Text-Mempelei gut sein?

Noch ein Tipp:
Manchal ist es nicht so leicht zu sehen, ob in einer Zelle (etwa D7) eine Zahl oder ein Text steht.
Sicher kann man das feststellen, indem man in eine leere Zelle die Formel =ISTZAHL(D7) oder auch =ISTTEXT(D7) schreibt.

Und noch eine Bemerkung:
Man kennt mich hier als ausdauernd und hartnäckig. Aber das ist natürlich nicht grenzenlos. :-)

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


 

Beiträge aus den Excel-Beispielen zum Thema "DateDiff Funktion berechnet falsche Lösung"