Datumsunterschied Excel/VBA

Lustiges Excel-Phänomen, das mir heute aufgefallen ist:

Excel meint, es gibt einen 29.02.1900, interpretiert 1900 also als Schaltjahr, was eindeutig falsch ist. Das wissen wir aus einer früheren IHK-Prüfung: Der Algorithmus zur Bestimmung eines Schaltjahres ist doch der folgende.

wenn Jahreszahl mod 400 = 0 -> Schaltjahr sonst wenn Jahreszahl mod 100 = 0 -> kein Schaltjahr sonst wenn Jahreszahl mod 4 = 0 -> Schaltjahr sonst -> kein Schaltjahr

Soviel dazu 😉

Aber jetzt zum eigentlichen Problem: VBA übernimmt diesen Fehler nämlich nicht und interpretiert Datumsangaben vor dem 01.03.1900 somit fälschlicherweise als einen Tag zu früh. 01.01.1900 wird also zu 31.12.1899. Und das ist ein Problem, da das letztgenannte Datum im internen Kalender gar nicht existiert und nen Fehler verursacht (z.B., wenn man (wie ich) das Datum auf Gültigkeit prüft).

D.h. bei Datumsangaben vor dem 01.03.1900, die VBA aus Excel-Zellen ausliest, muss immer ein Tag addiert werden!

2 Kommentare

  1. 14 Jahre später…
    Dateadd(“d”,1,#1900/2/28#) => 01.03.1900

    😉

  2. Haha, wer lesen kann, ist klar im Vorteil. Auch 14 Jahre später kann denkt Excel, dass 1900 ein Schaltjahr ist. VBA wusste es ja schon immer besser…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax