Code separieren und Wochentag berechnen

Foren-Geflüster, rund ums Datum

In diesem Forum wurde eine recht inter­es­sante Frage disku­tiert: Aus der recht­en Zif­fer eines numerischen Begriffs soll der Wochen­tag als Zahl sowie auch als Text, als Wort gener­iert wer­den. Und ver­schiedene dur­chaus funk­tion­ierende Lösun­gen wur­den dort schon vorgestellt, mich reizte die Umset­zung in Pow­er Query. An dieser Stelle gle­ich der Hin­weis: Ich habe mich in diese Lösung ganz bewusst auf die dargelegte Fragestel­lung konzen­tri­ert; im pro­fes­sionellen Umfeld würde ich auch die Berech­nun­gen der Zeit­en für die Brut­to- als auch Net­tostun­den sowie die Pause durch Pow­er Query berech­nen lassen.

Der Fragesteller ver­fügt zwar (nur) über die Excel-Ver­sion 2010, ich ver­wende hier aber die jew­eili­gen Menü- und Sym­bol­beze­ich­nun­gen als auch die Möglichkeit­en der Ver­sion 2016 beziehungsweise der Ver­sion 365 (Stand Herb­st 2018). Die ange­hängte Orig­i­nal-Datei des Forum-Beitrages habe ich hier zur Ver­fü­gung gestellt und für meine Lösung habe ich den Bere­ich Ver­such eins ver­wen­det.

Der besseren Trans­parenz wegen habe ich den Bere­ich D8:I11 kopiert und in eine neue Arbeitsmappe Als Wert einge­fügt. Auf die Tabellen in den Spal­ten M:N (in der Orig­i­nalen Datei) habe ich verzichtet, den Inhalt jedoch  „im Hin­terkopf”  behal­ten. 😎 Und die Zahlen 1 bis 7 ste­hen für Mon­tag bis Son­ntag, entwed­er in der Lang- oder kurz Schreib­weise. Da ich für die gegebene Auf­gabe die Pausen­zeit­en aus der Tabelle übernehmen und nicht berech­nen muss, brauche ich auch nicht die Tabelle aus den Zeilen 1:6.

Im neu erstell­ten Arbeits­blatt klicke ich in die Dat­en, StrgT oder StrgL, um und daraus eine Intel­li­gente Tabelle zu machen. Anschließend über Dat­en | Aus Tabelle (in Excel 20102013 über Pow­er Query  | Von Tabelle) die Dat­en in den Pow­er Query Edi­tor importieren. Das ganze stellt sich nun so dar:

Die Daten direkt nach dem Import

Die Dat­en direkt nach dem Import

Dass die Werte ab der zweit­en Spalte nicht als Zeit son­dern als Dez­i­malzahlen dargestellt wer­den stört mich gewiss nicht, vielle­icht aber Sie. Der besseren Optik wegen kön­nen Sie an dieser Stelle bere­its an die fünf Spal­ten durch einen Klick in die Über­schrift in der Spalte von, Shift und dann die Über­schrift Stun­den markieren. Im Menüband wählen Sie bei Daten­typ die Möglichkeit Zeit und bestäti­gen dann die Änderung des Daten­typs. Wie gesagt, und das dient nur der Optik und hat keinen Ein­fluss auf die Dat­en an sich.

Apro­pos Zahlen­for­mat: Durch das Kopieren als Wert wer­den prinzip­iell auch als Text for­matierte Zif­fer­n­fol­gen als Zahl einge­fügt. Und wenn Sie die Dat­en direkt aus ein­er gegebe­nen Datei mit als Text for­matierten Zif­fer­n­fol­gen (Zahlen) importieren wird Pow­er Query in den meis­ten Fällen automa­tisch ein Zahl-Zell­for­mat wählen.

Der erste Teil der Auf­gabe beste­ht ja darin, die let­zte Zif­fer in der Spalte Code zu separi­eren. Diese Zahl soll dann als Basis für die Berech­nung des Wochen­t­ages in Textform ver­wen­det wer­den. In wieweit dieser numerisch­er Wochen­tag für das weit­ere Vorge­hen von Bedeu­tung ist, hat sich mir aus dem Text der Fragestel­lung nicht erschlossen. Aus dem Grunde werde ich die gener­ierte Spalte auch in der endgülti­gen Lösung belassen und nicht löschen, obwohl ich sie für über­flüs­sig halte.

Im ersten Schritt ein Recht­sklick in die Über­schrift der Spalte Code und im Kon­textmenü wählen Sie dann den Punkt Spalte duplizieren. Automa­tisch wird eine neue Spalte mit der Über­schrift Code – Kopie erstellt. Der Typ dieser Spalte ist Naturgemäß Ganze Zahl, ändern Sie den Daten­typ auf beliebige Weise in Text. Immer noch im gle­ichen Menüband ein Klick auf das Sym­bol Spalte teilen und wählen Sie dann die Auswahl nach Anzahl von Zeichen. Nun geben Sie in das Textfeld eine 1 ein und markieren Sie anschließend ein­mal, soweit rechts wie möglich. Nach einem OK wird die Spalte geteilt; in der ursprünglichen Spalte (jet­zt Code – Kopie.1) sind alle Zif­fern mit Aus­nahme unter äußer­sten recht­en Zahl, in der neuen Spalte (Code – Kopie.2) befind­et sich die extrahierte let­zte Zif­fer, die automa­tisch als Ganze Zahl for­matiert wor­den ist. Die Spalte Code – Kopie.1 wird nicht mehr benötigt, darum löschen Sie diese. Benen­nen Sie nun in die Über­schrift der let­zten Spalte in W‑Tag um:

Die umbenannte Spalte mit den numerischen Wochentagen

Die umbe­nan­nte Spalte mit den numerischen Wochen­t­a­gen

Damit ist das erste Ziel erre­icht, näm­lich aus der Spalte Code die let­zte Zif­fer, welche hier ein Syn­onym für den Wochen­tag sein wird, abzutren­nen. Und jet­zt geht es darum, aus den in der Spalte W‑Tag ste­hen­den Zahlen 1 bis 7 den Namen des Wochen­t­ages, also Mon­tag (1) bis Son­ntag (7) zu gener­ieren. Selb­stver­ständlich wäre es ein denkbar­er Weg, die Pow­er Query-Alter­na­tive für den SVERWEIS() zu ver­wen­den. Dazu wür­den Sie dann eine oder bei­de Tabellen mit den Dat­en als Abfrage importieren und entsprechend der vorgegebe­nen Werte ver­wen­den. Einige Beispiele dafür sind in diesem Blog zu find­en, wenn Sie beispiel­sweise in das Such­feld Sver­weis Pow­er Query eingeben. Ich gehe jedoch einen anderen Weg, in der mir ein­fach­er erscheint.

Wech­seln Sie dazu zum Reg­is­ter Spalte hinzufü­gen und wählen dort im Menüband das erste Sym­bol Spalte aus Beispie­len. In der ganz recht­en, abge­tren­nten Spalte mit dem Namen Spalte1 tra­gen sie von Hand das Datum 01.01.2001 ein und bestäti­gen dann per Einga­betaste. Es bietet sich in Ihnen nun dieses Bild:

Das Datum ist ausgefüllt, aber …

Das Datum ist aus­ge­füllt, aber …

Wenn Sie genau hin­se­hen erken­nen Sie, dass die fol­gen­den 2 Zeilen ein­er Logik fol­gend aus­ge­füllt wor­den sind aber nicht (nur) um einen Tag, son­dern auch um einen Monat und um ein Jahr weit­er. 🙄 Darum schreiben Sie in die zweite Zeile der nun automa­tisch umbe­nan­nten Spalte (Zusam­menge­führt) den Datums-Text 02.01.2001 und bestäti­gen wiederum per Enter. Jet­zt stimmt die logis­che Abfolge und Sie kön­nen sich darauf ver­lassen, dass in dieser Spalte auch alle weit­eren Werte kor­rekt berech­net wer­den.

An der links­bündi­gen Aus­rich­tung in den kalen­darisch ausse­hen­den Dat­en erken­nen Sie, dass es sich dabei um Texte han­delt. Der klas­sis­che Weg wäre nun, den Daten­typ dieser Spalte in Datum zu ändern. Die neueren Ver­sio­nen des Pow­er Query bieten eine andere, gewiss ele­gan­tere Möglichkeit. Wech­seln Sie zum Reg­is­ter Trans­formieren, markieren erforder­lichen­falls noch ein­mal die Spalte Zusam­menge­führt und wählen dann beim Sym­bol bzw. dem Menüpunkt Datum die einzig mögliche Zeile Analysieren aus. Sie sehen, dass sich der Daten­typ automa­tisch zu Datum geän­dert hat. Wenn Sie nun noch ein­mal auf diesen Menüpunkt im Menüband Klick­en wer­den sie erken­nen, dass jet­zt fast alle Punk­te des Kon­textmenüs auswählbar sind. Markieren Sie Tag | Name des Tags und sofort wird und das kalen­darische Datum durch den Wochen­tag des entsprechen­den Wertes erset­zt. Zugegeben, es ist (nur) die Langschreib­weise, aber der Zweck des Vorhabens sollte damit erfüllt sein.

Um der Forderung des Fragestellers gerecht zu wer­den, muss diese Spalte nun nur noch an die erste Posi­tion ver­schoben wer­den. Und dazu ein Recht­sklick in die Über­schrift und im Kon­textmenü wählen Sie Ver­schieben | An den Anfang. Was noch bleibt: Diese erste Spalte soll noch einen anderen, sin­nvollen Namen bekom­men; ein Klick in die Über­schrift, F2 und Sie schreiben den Text Wochen­tag, gefol­gt von einem Return. Und damit ist diese Auf­gabe mit bzw. in Pow­er Query endgültig gelöst wor­den. 🙂 

Bleibt nur noch, das Reg­is­ter Datei anzuwählen, Schließen & laden und das Ergeb­nis dieser Abfrage wird in eine Tabelle eines neu erstell­ten Blattes geschrieben. Diese Liste kön­nen Sie dann nach Belieben an die gewün­schte Posi­tion eines beliebi­gen Sheets ver­schieben. Und da es sich hier­bei um eine ganz nor­male Excel-Tabelle han­delt, kön­nen Sie diese natür­lich auch weit­er nach Lust und Laune bear­beit­en, for­matieren, …

Der hier beschriebene Weg ist prinzip­iell für reine, „boden­ständi­ge” Anwen­der gedacht. Wer gerne mit Formeln arbeit­et oder sog­ar auch pro­gram­mieren kann, wird gewiss den Weg über die Formel-Sprache M wählen. Der wäre auch erforder­lich, wenn Sie das Ergeb­nis beispiel­sweise (auch in lan­destyp­is­ch­er) Kurz­schreib­weise des Wochen­t­ages  haben wollen. Und wie schon angedeutet wird ein eher pro­fes­sioneller Anwen­der die Spal­ten Std, Pause und Stun­den auch von vorn­here­in durch PQ berech­nen lassen und nicht durch Excel.

Eine kleine Ergänzung: Warum sollte es ger­ade der 1. Jan­u­ar 2001 sein? Es hätte auch jedes beliebige andere Datum sein kön­nen, solange der erste Tag des Monats ein Mon­tag ist. Denn im End­ef­fekt wird aus der Zahl 1 in der Spalte W‑Tag Ein Datum gener­iert, wo in die 1 für den Tag des Datums ste­ht. Und der 1. Jan­u­ar 2001 war ein Mon­tag.  💡 

▲ nach oben …

Dieser Beitrag wurde unter Datentyp anpassen, Datum & Zeit, Power Query, Spalten bearbeiten abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.