PQ: Ziffernfolgen (ohne Trennzeichen) zu Datum, Uhrzeit, IP, … konvertieren (1)

Xtract: Zif­fer­n­fol­gen, beispiel­sweise Uhrzeit­en, kalen­darische Dat­en, IP-Adressen, … die ohne Trennze­ichen als Text eingegeben oder importiert wor­den sind,  mit Pow­er Query zu Uhrzeit, Datum, IP, … mit den Trennze­ichen kon­vertieren. Hier: Uhrzeit­en

  Wis­sens­stand: Lev­el 2 ⇒ Solides Basiswis­sen in Excel, etwas Erfahrung in PQ   

Teil 1: Uhrzeiten konvertieren

Mit schön­er Regelmäßigkeit werde ich gefragt, wie fol­gen­des real­isiert wer­den kann:

  • Eingabe von beispiel­sweise kalen­darischen Dat­en, Uhrzeit­en, IP-Adressen oder ähn­lichen Zif­fer­n­fol­gen, jedoch ohne die Trennze­ichen (Punkt, Schrägstrich oder Minusze­ichen bei einem Datum, Dop­pelpunkt bei ein­er Uhrzeit oder auch den Punkt bei IP-Adressen) mit eingeben zu müssen.

Die Moti­va­tion als auch die Sinnhaftigkeit will ich hier nicht disku­tieren, der Wun­sch ist gegeben. In erster Lin­ie bietet sich dabei natür­lich ein selb­st definiertes Zahlen­for­mat an. Das Ergeb­nis sieht dann zwar wie gewollt aus, aber Excel „sieht” den­noch die ursprüngliche Eingabe und macht unter typ­is­chen Umstän­den keineswegs ein Datum, eine Uhrzeit oder eine auswert­bare IP daraus. Für die Uhrzeit wird hier im Blog als auch beispiel­sweise hier eine Lösung ange­boten, die Eingabe direkt zu „kor­rigieren”. Wenn es bei der Dat­eneingabe aber auf Geschwindigkeit ankommt, dann ist das gewiss nicht der beste Weg. Mit Pow­er Query bietet sich die Möglichkeit, eine kom­plette Spalte rasch umzu­for­matieren bzw. eine neue Spalte mit den kor­rek­ten (gewün­scht­en) Werten und Darstel­lun­gen zu gener­ieren.

▲ nach oben …

Uhrzeit

Grund­sät­zlich stellt sich zu Beginn die Frage, wie die Dat­en eingegeben oder woher sie importiert wor­den sind. Gemeint ist damit, dass es dur­chaus einen Unter­schied aus­macht, ob die Eingabe­spalte als Stan­dard oder als Text for­matiert ist. Nehmen Sie als Beispiel ein­mal 7:30 Uhr in der Frühe. Bei ein­er händis­chen Eingabe 730 ist es egal, ob die Spalte als Text oder Stan­dard for­matiert ist. Es wird immer die Zahl 730 in der Zelle ste­hen. Anders sieht es aus, wenn immer ein 4‑stelliger Wert als 0730 einge­tra­gen wird. Dann wird beim Stan­dard-For­mat die führende Null ent­fer­nt, bei ein­er Text-for­matierten Spalte wird dann wun­schgemäß 0730 erfasst sein.

▲ nach oben …

Text, 4‑stellig

Am ein­fach­sten ist es, wenn die Zei­tangaben immer 4‑stellig eingegeben und auch wegen der vorher ein­gerichteten Spal­ten-For­matierung Text in genau dieser Form in die einzel­nen Zellen über­nom­men wor­den sind. Dann ste­ht fest, dass an der drit­ten Stelle der Zeichen­folge ein : einge­tra­gen wer­den muss. Das lässt sich mit Pow­er Query auf ver­schiede­nen Wegen real­isieren…

▲ nach oben …

„Altbacken” 😉 (konservativ)

  • Markieren Sie nach dem Import der Dat­en die entsprechende Spalte(n).
  • Ändern Sie den entsprechen­den Daten­typ der Spal­ten bei Bedarf auf Text.
  • Spalte teilen | Nach Anzahl von Zeichen | 2.
  • Das Daten­for­mat bei­der neu erstell­ter Spal­ten bei Bedarf wiederum auf Text ändern.
  • Die bei­den Spal­ten nacheinan­der (erst Stun­den, dann Minuten) markieren.
  • Menü Trans­formieren | Spal­ten zusam­men­führen | Trennze­ichen:  Dop­pelpunkt | Neuer Spal­tenname kann beliebig eingegeben wer­den, gerne auch wieder der ursprüngliche Name (z.B. Spalte1).
  • Gle­iche Vorge­hensweise bei weit­eren betrof­fe­nen Spal­ten.
  • Alle der­art „behan­del­ten” Spal­ten als Zeit for­matieren.

An dieser Stelle noch ein­mal der Hin­weis, dass das über diesen Weg nur funk­tion­iert, wenn die Werte in Excel als „echter” Text vor­liegen. Also auch in der Excel-Tabelle beispiel­sweise 0730 zu sehen ist.

▲ nach oben …

Als M-Funktion

Etwas „schlanker” (ich mei­de bewusst den Begriff „ele­gan­ter”) lässt sich das mit der Funk­tion­al­ität der Sprache M lösen.  Bei gle­ich­er Aus­gangslage (1 Spalte mit den zu for­matieren­den Zif­fern) gehen Sie so vor:

  • Menü Spalte hinzufü­gen | Benutzerdefinierte Spalte 
  • Im Dia­log…
    • Neuer Spal­tenname: nach Belieben
    • Benutzerdefinierte Spal­tenformel: Text.Insert([Spalte1],2,":")
  • Diese Spalte als Zeit for­matieren
  • Die ursprüngliche Spalte (die ohne den Dop­pelpunkt) löschen.

Dass im Pow­er Query-Edi­tor die als Zeit for­matierten Werte stets mit Sekun­den dargestellt wer­den, ist nor­mal und kor­rekt. In der anschließend gespe­icherten Excel-Tabelle kann dann eine wun­schgemäße For­matierung vorgenom­men wer­den.

▲ nach oben …

Text, Standard oder Zahl, 1 bis 4‑stellig

Ist die Excel-Spalte als Stan­dard oder Zahl for­matiert, dann wird die Eingabe von 0000 (statt eigentlich 00:00) zum Ergeb­nis   0 führen, soweit (der Vere­in­barung entsprechend) kein Dop­pelpunkt als Tren­ner bei der Eingabe ver­wen­det wor­den ist. Also muss in Pow­er Query irgend­wie dafür gesorgt wer­den, dass das Zwis­ch­en­ergeb­nis (Zif­fern ohne Dop­pelpunkt) vier­stel­lig ist, um dann die hierüber beschriebe­nen Vorge­hensweisen durch­führen zu kön­nen.

Einige Muster-Dat­en sind rasch in die Zeilen ein­er Spalte eingegeben, die in Sachen Zahlen­for­mat als Stan­dard oder Zahl ein­gerichtet ist. Begin­nend mit der Eingabe 0000 gerne mehrere Zeit­en unter 10:00 Uhr (natür­lich ohne den Dop­pelpunkt) bis beispiel­sweise 1000 oder später. Sie erken­nen sel­ber die geän­derte Darstel­lung in Excel und das spiegelt sich naturgemäß auch nach einem Import in Pow­er Query wieder. Ich habe eine kleine Muster-*.xlsx erstellt, welche Sie hier herun­ter­laden kön­nen. Nach dem Import sieht das dann so aus:

Die Dat­en nach dem Import

An den Sym­bol­en links in den Über­schriften erken­nen Sie bere­its das For­mat der Spalte. Die Spalte Zeit dient einzig dem Ver­gle­ich zum endgültig zu erzie­len­den Ergeb­nis!

Im ersten Schritt wer­den Sie dafür sor­gen, dass jede Zelle der Spalte (Zeit) aus 4 Zif­fern beste­ht. Und das ist naturgemäß nur mach­bar, wenn der Daten­typ nicht Zahl son­dern Text ist. Und ja, es gibt natür­lich viele Wege, um das zu erre­ichen. Um nicht nur Ein­steigern gerecht zu wer­den, stelle ich Ihnen zwei der Möglichkeit­en vor. 😉 

▲ nach oben …

Zahl zu 4‑stelligem Text (Einsteiger)

Da ja min­destens 1 Zif­fer in der Zelle ste­ht, müssen 0 bis 3 Nullen vor­angestellt wer­den, um eine 4‑stellige Zif­fer­n­folge zu erlan­gen. In jed­er Pow­er Query – Ver­sion funk­tion­iert diese Vorge­hensweise:

  • Menü Spalte hinzufü­gen | Benutzerdefinierte Spalte
  • Bei Neuer Spal­tenname kön­nen Sie die Vor­gabe belassen, ich ver­wende Auf­füllen.
  • In das Feld Benutzerdefinierte Spal­tenformel geben Sie "000" (mit den Anführungsze­ichen) ein.
  • Wech­seln Sie zum Menü Trans­formieren
  • Die Spalte Auf­füllen ist markiert, Strg und ein Klick in die Über­schrift (Zeit). Acht­en Sie auf die Rei­hen­folge! 💡 
  • Recht­sklick in eine der bei­den markierten Über­schriften, im Kon­textmenü ein Klick auf Spal­ten zusam­men­führen und es im Feld Trennze­ichen bei –Keine– belassen. OK
  • Zusam­menge­führt ist markiert, Home bzw. Start (oder auch Recht­sklick), Spalte teilen | Nach Anzahl von Zeichen… | Anzahl von Zeichen: 4 | Ein­mal, so weit rechts wie möglich, dann OK.
  • Löschen Sie sie Spalte Zusammengeführt.1 und benen­nen Sie die Spalte Zusammengeführt.2 der Trans­parenz wegen wieder zu (Zeit) um.
  • Nor­maler­weise wurde nun seit­ens Pow­er Query (2 Zeilen weit­er oben im recht­en Seit­en­fen­ster) automa­tisch ein Schritt Geän­dert­er Typ1 erstellt. Dadurch wurde aus dem 4‑stelligen Text wieder eine (gekürzte) Zahl gemacht. Löschen Sie im recht­en Seit­en­fen­ster diese Zeile. ¿

Durch diese Schritte ist das Inter­ims-Ziel ein­er 4‑stelligen Zif­fer­n­folge mit erforder­lichen­falls führen­den Nullen erre­icht und die Spalte hat auch einen „vernün­fti­gen” Namen. 😉 

▲ nach oben …

Zahl zu 4‑stelligem Text (neuere Excel-Versionen)

In etwas knap­per­er Form der dur­chaus auch kürzere Weg, der Sie mit weniger Schrit­ten zum Ziel bringt, falls Ihre PQ-Ver­sion (derzeit ab 2019) dieses Vorge­hen bere­its unter­stützt. Aus­gangslage ist wieder direkt nach dem Import, die Spalte (Zeit) ist markiert …:

  • Trans­formieren | Textspalte | For­mat | Prä­fix hinzufü­gen | 000, dann OK.
  • Textspalte | Extrahieren | Let­zte Zeichen | 4

… und schon ste­ht in der Spalte (Zeit) der gewün­schte, 4‑stellige Text mit führen­den Nullen, falls erforder­lich. In der fol­gen­den Schrit­tfolge soll aus dieser Zif­fer­n­folge dann eine Uhrzeit gener­iert wer­den.

▲ nach oben …

Zahl zu 4‑stelligem Text (Fortgeschrittene)

Wiederum in allen Excel- genauer gesagt: Pow­er Query-Ver­sio­nen gibt es den Weg über eine Formel in der Sprache M. Aus­gangslage ist (natür­lich) die unbear­beit­ete, im PQ-Edi­tor frisch importierte Datei. Auch hier erstellen Sie erst ein­mal eine neue Spalte:

  • Spalte hinzufü­gen, Benutzerdefinierte Spalte.
  • Neuer Spal­tenname kön­nen Sie erst ein­mal so belassen, Sie wer­den später sowieso eine Anpas­sung vornehmen.
  • Bei Benutzerdefinierte Spal­tenformel geben Sie erst ein­mal diese Formel ein:
    "000" & Text.From([#"(Zeit)"])
  • Nach einem OK erken­nen Sie, dass fast alle Texte zu lang sind. Darum öff­nen Sie per Dop­pelk­lick auf die let­zte Zeile bei Angewen­dete Schritte im recht­en Seit­en­fen­ster noch ein­mal den Edi­tor und ergänzen die vorhan­dene Formel so:
    Text.End("000" & Text.From([#"(Zeit)"]), 4)
  • OK, und das Ergeb­nis stimmt. Lesen Sie in der Hil­fe zu den Funk­tio­nen gerne ein­mal die Erk­lärun­gen zu den bei­den Funk­tio­nen nach.
  • Löschen Sie die Spalte (Zeit), nach­dem Sie stich­probe­nar­tig die Ergeb­nisse mit den Aus­gangswerten ver­glichen haben.
  • Benen­nen Sie die let­zte Spalte nach Ihren Wün­schen um, gerne wieder als (Zeit).

▲ nach oben …

Generierung der Uhrzeit

Auch hier werde ich Ihnen zwei unter­schiedliche Wege aufzeigen. Welchen der bei­den Abläufe Sie nutzen, bleibt Ihrem eige­nen Geschmack über­lassen. Allerd­ings ist der zuerst vorgestellte Weg deut­lich ver­ständlich­er und gewiss leichter nachzu­vol­lziehen.

Klassisch und einfach

Da jet­zt ja in jed­er Zelle des entsprechen­den Spal­tenbere­ichs eine 4‑stellige Zif­fer­n­folge ste­ht stimmt in jedem Fall die Aus­sage, dass nach genau 2 Stellen ein Dop­pelpunkt als Trennze­ichen einge­fügt wer­den muss. Dadurch wird (zumin­d­est erst ein­mal optisch) die Zif­fer­n­folge zu ein­er Uhrzeit. Der ein­fach­ste Weg stellt sich aus mein­er Sicht so dar:

  • Markieren Sie die Spalte mit den geän­derten Dat­en, wenn Sie mein­er Empfehlung gefol­gt sind ist das die Spalte (Zeit).
  • Menü Home (oder Recht­sklick), Spalte teilen | Nach Anzahl von Zeichen… | 2.
  • Im recht­en Seit­en­fen­ster bei Angewen­dete Schritte den let­zten, automa­tisch hinzuge­fügten Schritt (Geän­dert­er Typ1) löschen ¿, damit in den bei­den neu gener­ierten Spal­ten statt der Zahl wieder ein 2‑stelliger Text ste­ht.
  • Selb­st wenn die bei­den Spal­ten schon markiert sein soll­ten, der Vor­sicht hal­ber: Klick­en Sie zuerst in die Über­schrift (Zeit).1, Strg oder Shift und dann ein Klick in die Über­schrift (Zeit).2.
  • Menü Trans­formieren und in der Gruppe Textspalte Klick­en Sie auf Spal­ten zusam­men­führen. Als Trennze­ichen wählen Sie Dop­pelpunkt. Bei Neuer Spal­tenname kön­nen Sie wieder (Zeit) eingeben, da es diese Beze­ich­nung derzeit ja nicht mehr gibt.
  • Ein Recht­sklick in (Zeit), dann Typ ändern | Zeit bewirkt, dass nun kor­rek­te Zei­tangaben in der Spalte ste­hen. Hin­weis: Wenn Sie das nicht machen, wird Excel nach Schließen & laden die Uhrzeit nicht wie gewün­scht erken­nen und ver­mut­lich die (kor­rek­te) serielle Zahl der Zei­tangabe in die Zellen schreiben.

Wie bere­its erwäh­nt zeigt der Pow­er Query-Edi­tor automa­tisch auch die Sekun­den mit an.  Nun kön­nen Sie auch die Spalte Zeit löschen, sie wird nicht mehr gebraucht. Das For­mat der Uhrzeit wer­den Sie wahrschein­lich nach dem Spe­ich­ern in ein Arbeits­blatt auf hh:mm anpassen.

▲ nach oben …

Fortgeschritten mit der Sprache M

Die Aus­gangslage ist in diesem Fall, dass in der zu bear­bei­t­en­den Spalte (Zeit) 4‑stellige Zif­fer­n­fol­gen als Text ste­hen. Das Ziel ist das gle­iche, näm­lich an drit­ter Stelle einen Dop­pelpunkt einzufü­gen und die Spalte anschließend als Daten­typ  Zeit zu for­matieren. Diese Schritte sind zielführend:

  • Falls noch nicht geschehen löschen Sie ide­al­er­weise gle­ich zu Beginn die erste Spalte Ze:it mit den Uhrzeit­en, damit nur noch die 4‑stelligen Zif­fer­n­fol­gen in der Abfrage enthal­ten sind. Das schon Ressourcen (auch wenn das bei diesen weni­gen Daten­sätzen nicht spür­bar ist).
  • Wech­seln Sie zum Menü Spalte hinzufü­gen.
  • Benutzerdefinierte Spalte und geben Sie bei Neuer Spal­tenname beispiel­sweise Zeit (also ohne die ein­schließen­den Klam­mern) ein.
  • In das große Textfeld Benutzerdefinierte Spal­tenformel schreiben Sie nun diese Formel:
    = Text.Insert([#"(Zeit)"], 2, ":")
    und bestäti­gen Sie mit OK.
  • Weisen Sie der Spalte Zeit auf beliebige Weise den Daten­typ  Zeit zu.
  • Hin­weis: Sie kön­nten die Formel auch ‑ähn­lich wie schon weit­er oben dargestellt- noch ein­mal ändern, um in 1 Schritt ein Zeit-For­mat zu gener­ieren:
    = Time.From(Text.Insert([#"(Zeit)"], 2, ":"))

Für die ursprüngliche Formel bin ich Ihnen noch eine Erk­lärung schuldig. 😉  Der Name der Funk­tion Text.Insert sollte klar sein, sofern Sie der englis­chen Sprache einiger­maßen mächtig sind. Nach der öff­nen­den run­den Klam­mer fol­gt in eck­ige Klam­mern einge­fasst der Spal­tenname. Falls Sie den Spal­tenna­men per Dop­pelk­lick einge­fügt haben, wur­den die Raute # und die Anführungsze­ichen " automa­tisch hinzuge­fügt, weil die Run­den Klam­mern im Namen der Über­schrift dieses erforder­lich machen.

Es fol­gt ein Kom­ma und anschließend die Posi­tion, an welch­er das fol­gende Argu­ment (der Dop­pelpunkt) einge­fügt wer­den soll. Für Excel-Anwen­der ist es gewiss gewöh­nungs­bedürftig, dass in Pow­er Query die Zählweise so gut wie immer mit 0 und nicht mit 1 begin­nt. Darum wird aus der real drit­ten Posi­tion in diesem Fall die 2 als Argu­ment ver­wen­det. Und Sie sehen, das Ergeb­nis stimmt.

▲ nach oben …

Immer 4- oder 6‑stellig (typischerweise als Text)

Wenn die Zif­fer­n­fol­gen garantiert (gerne durch Ihre Vorar­beit 😛 ) in 4- bzw. 6‑stelliger Länge vor­liegen, dann gibt es Pow­er Query eine aus­ge­sprochen „schicke” Möglichkeit. In den Abbil­dun­gen dieses Beispiels habe ich die eingegebene Uhrzeit ein­mal ganz bewusst auf einen 6‑stelligen Text erweit­ert. Vorge­hensweise wäre in diesem Fall so:
Menü Spalte hinzufü­gen | Spalte aus Beispie­len:

Erst ein­mal hier Klick­en …

Der Pow­er Query-Edi­tor stellt sich nun etwas unge­wohnt dar. In der linken Tabelle erken­nen sie ihre importierten und entsprechend erweit­erten Dat­en, rechts eine leere Tabelle mit der Über­schrift Spalte1. Jew­eils die erste Zeile der bei­den Tabellen ist markiert:

Ein vol­lkom­men unge­wohntes Bild… Ganz rechts wer­den Sie aktiv 😉

Ent­fer­nen Sie erst ein­mal das Häkchen in der Über­schrift der ersten Spalte Zeit. Dann ein Dop­pelk­lick in der recht­en Tabelle in die erste Zeile und es tut sich ein Kon­textmenü auf. Sie erken­nen, dass bere­its mehrere mögliche neue For­matierun­gen vorgeschla­gen wer­den:

Der rote Pfeil ist von mir als (hil­fre­ich­er) Hin­weis einge­fügt wor­den

Auch hier ein Dop­pelk­lick in jene Zeile, die das kün­ftige Wun­schfor­mat darstellt (ich habe mit dem roten HinwE•I•SPfeil die Posi­tion gekennze­ich­net). Ruck zuck wer­den die restlichen Zeilen der recht­en Tabelle mit vorgeschla­ge­nen Werten (in grau) dargestellt:

Eine Über­prü­fung ist hier dur­chaus sin­nvoll

Bei diesen weni­gen Zeilen ist es dur­chaus möglich und zumut­bar, einen einzel­nen Abgle­ich der vorgeschla­ge­nen und der gewün­scht­en Werte vorzunehmen. Bei größeren Daten­men­gen wer­den sie sich zuerst mit eini­gen Stich­proben beg­nü­gen. In jedem Fall Klick­en Sie bei bestandene Prü­fung rechts oben auf die Schalt­fläche OK. Die Dat­en wer­den dann in die „nor­male” Abfrage über­nom­men. Wenn es dann doch für eine Prü­fung zu viele berech­nete Zeitwerte sind und die ursprüngliche Spalte Ze:it noch in der Abfrage existiert, empfehle ich Ihnen fol­gen­des Vorge­hen: Spalte hinzufü­gen, Benutzerdefinierte Spalte und tra­gen Sie als Benutzerdefinierte Spal­tenformel ein:
= [#"Ze:it"]=[Zeit]
wobei sie die Spal­tenna­men natür­lich per Dop­pelk­lick aus dem recht­en Kas­ten übernehmen. Das Ergeb­nis ist in jedem Falle eine Logik-Auswer­tung. Erweit­ern Sie die Über­schrift durch Klick auf  und es sollte auss­chließlich der Wert TRUE zur Auswahl ste­hen. Ist ein FALSE dabei, dann entspricht min­destens eine Zeile nicht dem Wun­schergeb­nis.

Abschluss

Die Auf­gabe ist damit prak­tisch erledigt. In der Abfrage existiert nur noch die Spalte mit den kor­rek­ten Zeit­en, nach­dem Sie die nicht erforder­lichen Spal­ten gelöscht haben. Die Über­schrift kann an dieser Stelle noch so angepasst wer­den, wie sie später im Arbeits­blatt ste­hen soll. Schließen & laden oder Schließen & laden in… und die Abfrage wird entwed­er in ein neues Arbeits­blatt oder an eine von Ihnen zu bes­tim­mende Posi­tion geschrieben.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 3,00  freuen …

Dieser Beitrag wurde unter Datentyp anpassen, Datum & Zeit, Datum und Zeit, Power Query, PQ-Formeln (Sprache M), Text-Behandlung abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.