VBA - Makro Tage zw. zwei Daten ausgeben

Rouven90

Cadet 1st Year
Registriert
Jan. 2020
Beiträge
13
Nabend,

ich versuche grade ein Makro zu erstellen, welches mir die Anzahl der Tage zwischen ein Anfang- und ein Enddatum in eine Zeile wiedergibt.

In Excel stehen die Daten in der Spalte A. Dort werden fortlaufend neue eingetragen. Das Startdatum ist Fix und steht in A1. Als Enddatum soll die letzt gefüllten Zelle in Spalte A genommen werden.

Bei letzterem habe ich Probleme.

Das Makro funktioniert wenn ich beide Daten fest vorgebe. Der Fehler wird also bei wahrscheinlich hier liegen:
"DatumEnde = Cells(Rows.Count, 1).End(xlUp).Row"

Das steht in Spalte A:

16.11.2019​
18.11.2019​
19.11.2019​
22.11.2019​
22.11.2019​
23.11.2019​
23.11.2019​
26.11.2019​
28.11.2019​
30.11.2019​
30.11.2019​
07.12.2019​
12.12.2019​
14.12.2019​
16.12.2019​
21.12.2019​
21.12.2019​
21.12.2019​
23.12.2019​
28.12.2019​
31.12.2019​
04.01.2020​
09.01.2020​
13.01.2020​
18.01.2020​

Richtige wäre 63 Tage. Mit folgenden Code kommt allerdings -43760 raus.

Code:
Sub Tage()


Dim DatumStart As Date
Dim DatumEnde As Date
Dim Resultat


DatumStart = Tabelle1.Range("A1")
DatumEnde = Cells(Rows.Count, 1).End(xlUp).Row


Resultat = "Anzahl der Tage " & DateDiff("d", DatumStart, DatumEnde)

ActiveCell = Resultat


End Sub

Kann mir hier jemand meinen Fehler aufzeigen?

Gruss
Rouven
 
Welches Zahlenformat ist denn in der Zielzelle eingestellt?
Bist du dir sicher, dass mit den Zahlenwerten überall die Formatierung stimmt? Weist du wie Excel Datum speichert? Das ist eine Zahl die (ohne das Minus) deinem Ergebnis nicht ganz unähnlich ist. Daher könntest du, solange es Chronologisch läuft einfach für DatumEnde die Max funktion verwenden. Das neuste Datum hat die Größte Zahl hinterlegt und die Max Funktion kannst du natürlich wahlweise im VBA oder auch in der Excel Tabelle angeben :) somit geht das eigentlich auch ganz bequem ohne VBA wenn ich mich nicht irre :)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Rouven90
Hab da mal was ohne VBA gebastelt ... sind andere Datumswerte daher auch ne andere Differenz :)
Ergänzung ()

Rouven90 schrieb:
Die steht auf "Standard".
Mit Standard wirst du nicht weit kommen ;) Du solltest für solche Operationen schon auf das Datum Kurz Format umstellen :)
 

Anhänge

  • Gefällt mir
Reaktionen: Rouven90
Danke erstmal für deine andere Lösung! Super, bin ich nicht drauf gekommen.

Die VBA Variante interessieren mich jetzt trotzdem.

Die Zielzelle gibt ja kein Datum zurück. Deswegen wäre doch Standard hier nicht verkehrt? Es funktioniert ja auch wenn ich die Zelle des Enddatums Fix vorgebe. Also so:

Code:
Sub Tage()


Dim DatumStart As Date
Dim DatumEnde As Date
Dim Resultat


DatumStart = Tabelle1.Range("A1")
DatumEnde = Tabelle1.Range("A25")


Resultat = "Anzahl der Tage " & DateDiff("d", DatumStart, DatumEnde)

ActiveCell = Resultat


End Sub

Wie gesagt deine Lösung hilft mir (Danke!) - nur würde ich gerne Wissen wo da jetzt der Fehler ist.
 
Code:
DatumEnde = Cells(Rows.Count, 1).End(xlUp).Row

Die besagte Zeile gibt dir nicht den Inhalt der Zelle wieder, sondern die Zeile selbst.
Du musst also noch auf den Zellinhalt zugreifen.

Das Ergebnis waere aus deinem Beispiel also 25 und damit auch kein Datum.
 
und wenn man das Startdatum von 25 abzieht ... dann kommt man, Oh Wunder, auf das von dir benannte Ergebnis: Das ist eben der Weg wie Excel mit Datumsangaben umgeht. Wenn du es wirklich mit VBA Lösen möchtest dann rufe doch einfach die Max Funktion in VBA auf ... dann bekommst du auch den Richtigen wert :)
 
Zurück
Oben