Berechnung des Wochentages vor dem 1.1.1900
Wer jemals versucht hat, mit Excel Berechnungen jeglicher Art mit kalendarischen Daten vor dem 20. Jahrhundert durchzuführen die oder der weiß, dass Excel (Windows-Version) da ganz schön „zickig” ist… 😎
Sie finden zwar den einen oder anderen Tipp bei Excelformeln.de, aber da gibt es ja noch die „etwas” älteren Herren Gregor und Julius, welche in Sachen Kalender für einen tiefen Einschnitt verantwortlich waren. Nach dem Römischen Kaiser Julius Cäsar ist der frühere Julianische Kalender benannt, nach Papst Gregor XIII wurde der heute in den größten Teilen der Welt gebräuchliche Gregorianische Kalender benannt. Mehr Hintergrundwissen bekommen Sie beispielsweise hier bei Wikipedia.
Vorgeplänkel
Frage: Auf welchen Wochentag fiel der 1.1.1900? Tragen Sie gerne in A1 die Überschrift Datum ein und in A2 das Datum 1.1.1900. In B1 schreiben Sie bitte Wochentag und auch gleich in C1 Wochnentag (Text) als Überschriften. Excel „beantwortet” die Frage nach dem Wochentag, wenn Sie in B2 diese Formel verwenden: =WOCHENTAG(A2; 2)
. Das Ergebnis ist 7, da hier im europäischen Raum die Woche mit dem Montag beginnt. Und in C2 verwenden Sie die Formel =TEXT(A2; "TTTT, T.MMMM JJJJ")
. Idealerweise formatieren Sie diese kleine Liste noch als Intelligente Tabelle. Das Ganze stellt sich nun beispielsweise so dar:
Okay, der 1. Januar 1900 war also ein Sonntag. Markieren Sie die Zelle C2, ein Klick auf Tab und tragen Sie dann in A3 das Datum des 2. Januar 1900 ein. Die beiden Nachbarzellen werden automatisch mit den entsprechenden Werten des Folgetages ausgefüllt. Und wenn Sie schon einmal dabei sind, lassen Sie Excel den Wochentag von Silvester 1899 berechnen, also für den 31.12.1899:
Aha… 😯 Und ja, ich hatte auch schon zu Beginn angemerkt, dass Excel nicht so ganz alleine ohne Umwege mit kalendarischen Daten vor dem 20. Jahrhundert umgehen kann. Als Test sollten Sie in A5 noch einmal das Datum 1.4.1899 (in dieser Schreibweise) eintragen, auch wenn es kein Aprilscherz ist oder sein soll. 😎
Und nun treiben wir es auf die Spitze: Schreiben Sie in A6 den 28.02.1900, in A7 die Formel =A6+1
und in A8 noch =A7+1
.
So weit, so gut; oder vielleicht doch so schlecht? Hier hat Excel nämlich einem Tag, den es gar nicht gibt, als Datum gewertet und auch einen Wochentag „verpasst”. Den 29. Februar 1900 gibt es nämlich gar nicht in der Realität, obwohl die Jahreszahl ohne Rest durch 4 teilbar ist, handelt es sich keineswegs um ein Schaltjahr. Die Begründung können Sie auch im oben verLinkten Wikipedia-Artikel nachlesen.
Power Query ist „schlauer” 😉
Importieren Sie diese eben erstellte Tabelle in den Power Query-Editor. Und irgendwie hat sich auf den ersten Blick gar nicht so viel geändert:
Die Spalten Datum und Wochentag (Text) habe ich händisch verbreitert, damit die Datentypen besser erkennbar und auch die kompletten Einträge sichtbar sind. Ab Version Excel 2019 erledigt das übrigens Power Query alleine für Sie 🙂 .
Sie erkennen schon an der Ausrichtung des Zellinhalts, dass in Datum teils kalendarische Daten, teils Texte stehen. Und in der letzten Spalte Wochentag (Text) sind es wie auch im Excel Arbeitsblatt nur Texte.
Um auch in Power Query besser den Vergleich zum Excel-Ergebnis erkennen zu können, erstellen Sie von der ersten Spalte eine Kopie. Das geht ideal per Rechtsklick in die Überschrift und dann Spalte duplizieren. Ich benenne die neue Spalte gleich um und nenne diese PQ-Datum. Rechtsklick in die Überschrift dieser neuen Spalte, Typ ändern | Datum. Sie erkennen rasch, dass nun alle Werte rechtsbündig sind und damit offensichtlich auch ein „echtes” Datum enthalten.
Wechseln Sie nun zum Menü Spalte hinzufügen und achten Sie darauf, dass auch die Spalte PQ-Datum markiert ist. In der Gruppe Aus Datum & Uhrzeit wählen Sie Datum | Tag | Name des Tags. Und prima, der Wochentag wird ausgegeben. Sogar auch für die Tage das 19. Jahrhunderts. Und wenn Sie einmal nur die Bezeichnungen der Wochentage der Spalten Wochentag (Text) und PQ-Datum vergleichen, werden Sie feststellen, dass alle Tagesbezeichnungen der Daten des 20. Jahrhunderts gleich sind. Prima!
„Prima”, wirklich? Ich habe einige Absätze weiter oben nicht ohne Grund „auf den ersten Blick” geschrieben. Um etwas mehr Licht in diese Anmerkung zu bringen, duplizieren Sie der Einfachheit halber erst einmal diese Abfrage. Für diese Aktion sind die Daten aus dem 19. Jahrhundert nicht relevant, diese sollen herausgefiltert werden.
Gehen Sie dazu den sicheren Weg über PQ-Datum und filtern diese Spalte nach den Datum-Werten, die größer oder gleich dem 1. Januar 1900 sind. Anschließend sind nur noch 4 Datensätze/Zeilen übrig. Okay, und was könnte dabei auffällig oder zu bemängeln sein? Bei diesen wenigen Zeilen mute ich Ihnen zu, alles, aber wirklich alles Zelle für Zelle nachzuprüfen und auf Übereinstimmung zu kontrollieren. Da sollten Sie auch schon fündig werden. – Wenn Sie als fortgeschrittener PQ-Anwender in einer großen Datei nach Ungereimtheiten dieser Art suchen, bietet sich folgendes Vorgehen an:
- Menü Spalte hinzufügen | Benutzerdefinierte Spalte
- Neuer Spaltenname: Vergleich
- Benutzerdefinierte Spaltenformel:
= Date.From([#"Wochentag (Text)"])=[#"PQ-Datum"]
… und Überraschung:
Eigentlich hätte ich ja ausschließlich ein TRUE oder ein FALSE erwartet. Sie gewiss auch. Wenn Sie aber rechts des Wortes Error (beispielsweise in Zeile 3) in den leeren Raum der Zelle Klicken, wird Ihnen im unteren Teil des Fensters markant gelb hinterlegt die Ursache angezeigt:
Na ja, die Ursache wird aufgeführt. Aber warum ist eine Konvertierung nicht möglich? Wahrscheinlich wissen Sie es schon, aber es muss doch auch mit PQ-Werkzeugen möglich sein, der Sache auf den Grund zu gehen und bei der Gelegenheit auch gleich als Ergebnis möglichst ein TRUE oder FALSE zu bekommen. Gesagt, getan…
- Duplizieren Sie die Spalte Wochentag (Text).
- Rechtsklick in Wochentag (Text) – Kopie und Spalte teilen | Nach Trennzeichen | Leerzeichen | Beim äußersten linken Leerzeichen.
- Die Spalte Wochentag (Text) – Kopie.1 löschen.
- Spalte hinzufügen | Benutzerdefinierte Spalte.
- Als Überschrift Vergleich_2 verwenden und als Formel tragen Sie ein:
= [#"PQ-Datum"]=Date.From([#"Wochentag (Text) - Kopie.2"])
- OK und „na ja…”.
Auch wenn sich da ein Error „eingeschlichen” hat ist das Ergebnis voll in Ordnung. Die ersten beiden Zeilen und auch die letzte enthalten den erwarteten Logik-Wert. Und Power Query sagt Ihnen in Zeile 3 ganz klar, dass der 29. Februar 1900 ein Fehler ist. Stimmt ja auch! Darum ist das Ergebnis aus meiner Sicht vollkommen in Ordnung.
Eine wichtige Erkenntnis
Sie wissen, dass beim filtern einer Tabelle oder Liste der Inhalt der Zeilen an sich nicht verändert wird; es werden je nach Situation mehr oder weniger Zeilen ausgeblendet (in Excel) oder physisch gelöscht (in Power Query). Aber irgendwie ist oder scheint das hier anders als gewohnt zu sein oder auch den Regeln entsprechend.
Wenn ich solchen Ungereimtheiten auf den Grund gehen will, dann fange ich so gut wie immer ganz von vorne an und arbeite mich Schritt für Schritt bis zu dem Punkt vor, wo das unerwartete Ergebnis zum ersten Mal auftaucht. Für die Analyse kann es dann durchaus vorkommen, dass ich den einen oder anderen Schritt in den Ablauf einfüge. Und genau das wird auch hier geschehen.
Immer unter dem Aspekt, dass es sich ja auch um zig tausende von Zeilen handeln könnte, tue ich hier so, als wenn genau das der Fall ist. Und da ich den aktuellen Status der Abfrage Tabelle1 (2) sichern möchte, dupliziere ich wiederum diese Abfrage. Nun klicke ich im rechten Seitenfenster bei Angewendete Schritte auf den ersten Eintrag. Okay, der erste Eintrag ist der 31.12.1899, als Wochentag ist 7 (also Sonntag) eingetragen und bei Wochentag (Text) steht Sonntag, 1.Januar 1900. Und auch in der zweiten Zeile finden Sie diese Diskrepanz. Und was so richtig irritierend sein könnte: Zeile 7 hat das Datum des 1.3.1900 und dort stimmt auch der Wert in Wochentag (Text) mit dem in der Spalte Datum überein!
Um Importfehler auszuschließen gehe ich nun erst einmal den Weg über Datei | Schließen & laden in… | Nur Verbindung erstellen, die Abfragen werden geschlossen und das als Quelle dienende Arbeitsblatt ist voll umfänglich sichtbar. Hmmm, in A2 (der ersten Daten-Zeile) steht als Datum der 01.01.1900, der berechnete Wochentag 7 und das ebenfalls durch Excel berechnete Datum mit alphanumerischem Wochentag. Und in PQ war das doch anders, oder? – Ich habe einmal das Abfragefenster so positioniert, dass die Excel-Quelle und die PQ-Abfrage nebeneinander auf dem Bildschirm sichtbar sind:
In der Editier-Zeile der Power Query-Abfrage ist klar erkennbar, dass die Datenquelle der Inhalt ([Content]) der Tabelle1 der aktuellen Arbeitsmappe (CurrentWorkbook) ist. Und prinzipiell werden ja alle Werte 1:1 übernommen; alle Zellen werden als Wert, also unformatiert übernommen. Die berechnete Zahl 7 aus B2 wird als numerischer Wert in die Abfrage Zeile 1, Spalte Wochentag übernommen, praktisch gleich wie in Wochentag (Text).
Bei Datum ist gewohnheitsgemäß die Uhrzeit 00:00:00 angehängt worden, aber aus dem 1. Januar 1900 hat PQ den 31. Dezember 1899 gemacht. Sie wissen auch, dass in Plain Excel ein als Datum eingegebener Wert als Zahl gespeichert wird und der 1.1.1900 entspricht der 1. Und wie sieht das in Power Query aus? Das können Sie ganz leicht kontrollieren, indem Sie den Datentyp der Spalte Datum auf Ganze Zahl ändern. Und siehe da, PQ hat den Wert 1 übernommen. Und da PQ den Fehler mit dem nicht existierenden 29.2.1900 ausgemerzt hat, differieren alle kalendarischen Daten vom 1.1.1900 bis zum 28.2.1900 im den Wert 1 (je nach Sichtweise +1 oder ‑1). Und alles, was vor dem 20. Jahrhundert liegt, kann Excel nur als Text werten und ohne Hilfsmittel (beispielsweis ±400 Jahre) nicht berechnen, Power Query aber sehr wohl.
Entfernen Sie nun die eben eingefügte Änderung des Datentyps¿, damit wieder in der ersten Spalte kalendarische Daten stehen. Bei großen Datenmengen könnten Sie nun noch bei Angewendete Schritte auf Name des Tages eingefügt Klicken und über Spalte hinzufügen | Indexspalte | Von 1 eine durchgehende Nummerierung generieren, welche der aktuellen Zeilennummer entspricht. Und wenn Sie nun im rechten Seitenfenster auf die letzte Zeile Klicken werden Sie erkennen, dass der 01.01.1900 tatsächlich der Zeile 2 des Ursprungs entspricht und nur wegen des Filterns nun in der ersten Datenzeile dargestellt wird.
… und der Wochentag?
Diese Hilfs-Abfrage hat gewiss ihre Schuldigkeit getan. Ich würde sie aus Gründen der Performance löschen, Sie können sie aber gerne beibehalten und wieder zu Tabelle1 (2) wechseln. Excel „behauptet” ja, dass der 1. Januar 1900 ein Sonntag sei. Und PQ berechnet dieses Datum als Montag; siehe (in der PQ-Abfrage) Spalte Datum, PQ-Datum und Name des Tages. Wer hat denn nun Recht, was die ersten „echten” 60 Tage des Jahres 1900 betrifft?
Meine Lösung ist simpel und sollte auch Sie überzeugen: Nutzen Sie die Suchmaschine Ihrer Wahl und geben als Suchbegriff Wochentag 1.1.1900 ein. Und siehe da, Power Query hat Recht. Es ist der Montag. Konsequenterweise können Sie ja noch den 1. März 1900 per Suchmaschine ausgeben lassen und Sie werden feststellen, dass hier eine Übereinstimmung vorliegt, wie auch in der Abfrage, wo in den Spalten Wochentag (Text) und Name des Tages identische Werte stehen.
Fazit: Wenn Sie in Plain Excel den Wochentag eines Datums zwischen dem 1.1.1900 und (einschließlich) dem 28.2.1900 berechnen, dann ist das Ergebnis falsch. Sie müssen den folgenden Wochentag anwenden. Und den 29. Februar 1900 gibt es ja bekanntlich so wie soicht…
Als letzten Schritt können Sie der Komplettheit wegen im rechten Seitenfenster die Zeile mit dem Eintrag Gefilterte Zeilen wieder löschen und auch alle Spalten außer Datum und Name des Tages entfernen. Dann sehen Sie passend zum jeweiligen Datum den korrekten Wochentag, was ja auch der eigentliche Sinn der Übung ist.
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,50 € freuen … (← Klick mich!)