Getagged: Kalender
Kalendertabelle in Power Query erzeugen
Mit dem folgenden Code könnt Ihr eine Kalendertabelle aus eueren Daten in Excel oder Power BI erzeugen. Ich habe hier in diesem Fall eine Datei mit einer Tabelle namens factSales. Diese hat eine Spalte namens Datum.
Der Clou an dieser Formel ist, dass nicht nur der Kalender dynamisch erzeugt wird, sondern auch Kalenderwoche, Quartal und Monat zusammen für die Auswertung erzeugt werden.
Ich verlasse mich nicht auf die Kalendertabelle, die man automatisch erzeugen kann, da hier ich einfach mehr Kontrolle über die Daten habe.
In einem späteren Video werde ich den Code erläutern und dann noch per API-Abfrage um die Feiertage eines Bundeslandes erzeugen.
Diesen Code nun einfach Kopieren und in den Power Query-Editor einer leeren Abfrage einfügen.
Code startet hier:
let Quelle = Excel.CurrentWorkbook(){[Name="factSales"]}[Content], DatumZuDate = Table.TransformColumnTypes(Quelle,{"Datum", type date}), // greift auf Tabelle factSales zu. Dort ist nur die Spalte Datum interessant und wird als Datum formatiert BerechneterJahresbeginn = Table.TransformColumns(DatumZuDate,{{"Datum", Date.StartOfYear, type date}}), JahresbeginnZuZahl = Table.TransformColumnTypes(BerechneterJahresbeginn,{{"Datum", Int64.Type}}), DatumStart = List.Min(JahresbeginnZuZahl[Datum]), /* Jedes Datum wird auf Jahresanfang gesetzt. Somit erhält man das kleineste Datum des frühesten Jahres Es resultiert dann ein Wert, der als Listenwert abgerufen werden kann*/ BerechnetesJahresende = Table.TransformColumns(DatumZuDate,{{"Datum", Date.EndOfYear, type date}}), JahresendeZuZahl = Table.TransformColumnTypes(BerechnetesJahresende,{{"Datum", Int64.Type}}), DatumEnde = List.Max(JahresendeZuZahl[Datum]), /* Jedes Datum wird auf Jahresende gesetzt. Somit erhält man das größte Datum des letzten Jahres Es resultiert dann ebenfallsein Wert, der als Listenwert abgerufen werden kann*/ Liste = {DatumStart .. DatumEnde}, ListeInTabelleKonvertiert = Table.FromList(Liste, Splitter.SplitByNothing(), null, null, ExtraValues.Error), // Aus DatumStart und Datumende wird eine Zahlenliste erzeugt, die dann in eine Tabelle gewandelt wird ZahlenZuDatum = Table.TransformColumnTypes(ListeInTabelleKonvertiert,{{"Column1", type date}}), DatumSpalte = Table.RenameColumns(ZahlenZuDatum,{{"Column1", "Datum"}}), // Die Zahlen werden in ein Datum verwandelt, somit erhält man komplette Tage aller notwendigen Jahre JahrEingefügt = Table.AddColumn(DatumSpalte, "Jahr", each Date.Year([Datum]), Int64.Type), MonatEingefügt = Table.AddColumn(JahrEingefügt, "Monat", each Date.Month([Datum]), Int64.Type), QuartalEingefügt = Table.AddColumn(MonatEingefügt, "Quartal", each Date.QuarterOfYear([Datum]), Int64.Type), // Jahr, Monat und Quartal werden als Zahlen eingefügt JahrQuartal = Table.AddColumn(QuartalEingefügt, "Jahr Quartal", each Text.Combine({Text.From([Jahr], "de-DE"), Text.From([Quartal], "de-DE")}, "-"), type text), // Jahr und Quartal werden für spätere Auswertungen vereint MonatZweistellig = Table.AddColumn(JahrQuartal, "Jahr Monat", each if [Monat] < 10 then Text.Combine( {Text.From([Jahr], "de-DE"), "-0", Text.From([Monat], "de-DE")} ) else Text.Combine( {Text.From([Jahr], "de-DE"), "-", Text.From([Monat], "de-DE")} ) ), /*Jahr, Bindestrich und zweistellige Monatsnummer werden als neue Spalte ergänzt. Die WENN-Funktion prüft, ob das Jahr einstellig ist */ Kalenderwoche = Table.AddColumn(MonatZweistellig, "KW", each if Number.RoundDown((Date.DayOfYear([Datum])-(Date.DayOfWeek([Datum], Day.Monday))+9)/7)=0 then Number.RoundDown((Date.DayOfYear(#date(Date.Year([Datum])-1,12,31))-(Date.DayOfWeek(#date(Date.Year([Datum])-1,12,31), Day.Monday))+9)/7) else if (Number.RoundDown((Date.DayOfYear([Datum])-(Date.DayOfWeek([Datum], Day.Monday))+9)/7)=53 and (Date.DayOfWeek(#date(Date.Year([Datum]),12,31), Day.Monday)<3)) then 1 else Number.RoundDown((Date.DayOfYear([Datum])-(Date.DayOfWeek([Datum], Day.Monday))+9)/7)), // Die KW nach ISO 8601 wird ermittelt JahrKWCalc = Table.AddColumn(Kalenderwoche , "JahrKW", each if [Monat]=1 and [KW]>51 then [Jahr]-1 else if [Monat]=12 and [KW] = 1 then [Jahr]+1 else [Jahr]), // Das Jahr der entsprechenden KW wird ermittelt. Dies weicht eventuell vom Kalenderjahr ab. ZahlenZuText = Table.TransformColumnTypes(JahrKWCalc ,{{"JahrKW", type text}, {"KW", type text}}), JahrKWZusammen = Table.AddColumn(ZahlenZuText , "Jahr KW", each [JahrKW]&"-"& Text.End("0"&[KW], 2), type text), // Jahr und KW werden vereint. Hier mal nicht die TextCombine-Formel von oben SpaltenRaus = Table.RemoveColumns(JahrKWZusammen ,{"KW", "JahrKW"}), // Überflüssige Spalten raus und noch Wochentag = Table.AddColumn(SpaltenRaus, "Tag", each Date.DayOfWeekName([Datum]), type text), WochentagZahl = Table.AddColumn(Wochentag, "Tag der Woche", each Date.DayOfWeek([Datum], 1) + 1, Int64.Type), Monatsname = Table.AddColumn(WochentagZahl, "Monatsname", each Date.MonthName([Datum]), type text) // Noch ein paar Informationen ergänzt in Monatsname
Code endet hier!
Hier ist die Datei zum Download mit ein paar Demodaten:
E1031 Verkäufe Kalendertabelle
Freue mich auf Feedback und Danke für die Unterstützung des Kanals!
Sonnige Grüße
Andreas
Kalendertabelle – volle 10 Jahre
Warum war ein Monat so umsatzschwach? Wie viele Verkaufstage hat ein Monat? Oder wie sieht mein aktueller Umsatz im Vergleich zum passenden Vorjahreszeitraum aus?
Zahlen sagen nur wenig aus, wenn man sie ohne Kontext betrachtet. Zeitraum, Zeitpunkt, parallel laufende Ereignisse etc.
Zudem sieht der Kalender auch nicht für jeden gleich aus.
Wir betrachten meist das Kalenderjahr – und das schon aus unterschiedlichem Blickwinkel. Für die einen beginnt die Woche am Montag und hat fünf Arbeitstage – für die andere jedoch 6 Verkaufs- und Arbeitstage. Für die einen beginnt die erste Kalenderwoche automatisch am 1. Januar einen Jahres (z. B. in den USA) – für uns in der Woche, in der mehr neue Tage als Tage des alten Jahres sind (also mindestens vier Januartage und somit auch der Donnerstag). Für das eine Unternehmen ist das Wirtschaftsjahr identisch mit dem Kalenderjahr – wenn man sich aber die Geschäftsberichte großer Unternehmen anschaut, beginnt zum Beispiel bei thyssenkrupp das Geschäftsjahr am 1. Oktober eines Jahres und endet am 30. September des Folgejahres. Entsprechend werden auch die Monate anders gezählt. Theater widerum haben neben Kalender- und Geschäftsjahr noch ein zusätzliches Spieljahr … ach ja, Ferien pro Bundesland und abweichende Feiertage gibt es ja auch noch.
Kalendertabellen selbst können Großteils automatisiert errechnet werden. Andere Informationen wie z. B. der Reformationstag aus dem Jahr 2018 und z. B. die Ferien eines Bundeslandes wie Nordrhein-Westfalen müssen manuell ergänzt werden.
In einer neuen Seminarreihe gehe ich auf die Kalendererstellung und Datumsberechnung in Excel selbst, in Power Query mit der eigenen Programmiersprache M, sowie der Erstellung in PowerPivot mit DAX-Funktionen (Data Analysis Expressions) ein. Als i-Tüpfelchen könnte noch die Kalenderberechnung in VBA folgen. Oder schreibt man das mittlerweile iTüpfelchen?
Einige sind ja schon auf mein PDF-Skript gestoßen. Das wird nach und nach fortgeführt: Excel – Datums- und Zeitfunktionen
Auch hatte ich an anderer Stelle schon mal eine Kalendertabelle zur Verfügung gestellt und die Feiertage und Schulferien von NRW ergänzt. Diese Informationen und weitere Ergänzungen gibt es nun zum Download in folgender Excel-Datei (aktualisiert!): Kalendertabelle
Die Datei liegt im XLSX-Format vor und beinhaltet auch Informationen zur Ermittlung von Geschäfts- bzw. Fiskaljahren.
Für alle, die nichts herunterladen wollen oder dürfen, die Spalten enthalten:
- Spalte: Datum –> Liste manuell gelistet
- Spalte: Jahr =JAHR([@Datum])
- Spalte: Monat_kurz =MONAT([@Datum])
- Spalte: Monat =TEXT([@Datum];”MMMM”)
- Spalte: Tag Monat =TAG([@Datum])
- Spalte: Tag Woche =WOCHENTAG([@Datum];2)
- Spalte: Wochentag =TEXT([@Datum];”TTTT”)
- Spalte: Tage im Monat =TAG(MONATSENDE(DATUM([@Jahr];[@[Monat_kurz]];1);0))
- Spalte: KW =KALENDERWOCHE([@Datum];21)
- Spalte: Quartal =”Q”&AUFRUNDEN([@[Monat_kurz]]/3;0)
- Spalte: Jahr Quartal =[@Jahr]&” “&[@Quartal]
- Spalte: Jahr Monat =TEXT([@Datum];”JJJJ-MM”)
- Spalte: Halbjahr =WENN([@[Monat_kurz]]<=6;”HJ 1″;”HJ 2″)
- Spalte: Jahr KW =JAHR([@Datum])-WENN(UND(MONAT([@Datum])=1;
KALENDERWOCHE([@Datum];21)>51);1;0)+WENN(UND(MONAT([@Datum])=12;
KALENDERWOCHE([@Datum];21)=1);1;0)&”-“&TEXT(KALENDERWOCHE([@Datum];21);”00”) - Spalte: Feiern NRW –> manuell auf WAHR und FALSCH gesetzt
- Spalte: Feiertage NRW –> manuell auf WAHR und FALSCH gesetzt
- Spalte: Werktag =WENN([@[Tag Woche]]<=5;”Werktag”;”Wochenende”)
- Spalte: Verkaufstage Monat NRW =ZÄHLENWENNS([Tag Woche];”<=”&6;[Jahr];JAHR([Datum]);
[Monat_kurz];MONAT([Datum]);[Feiertag NRW];FALSCH) - Spalte: Werktage Monat NRW =ZÄHLENWENNS([Tag Woche];”<=”&5;[Jahr];
JAHR([Datum]);[Monat_kurz];MONAT([Datum]);[Feiertag NRW];FALSCH) - Spalte: FY =rngFYPräfix&WENN(rngStartFiskaljahr=1;[@Jahr];
WENN([@[Monat_kurz]]<rngStartFiskaljahr;[@Jahr]-1&”/”&RECHTS([@Jahr];2);
[@Jahr]&”/”&1*RECHTS([@Jahr];2)+1)) - Spalte: FY M =[@FY]&” – “&TEXT(WENN([@[Monat_kurz]]<
rngStartFiskaljahr;12-rngStartFiskaljahr+[@[Monat_kurz]];[@[Monat_kurz]]-rngStartFiskaljahr)+1;”00”) - Spalte: FY Q =[@FY]&” – Q”&AUFRUNDEN((WENN([@[Monat_kurz]]<
rngStartFiskaljahr;12-rngStartFiskaljahr+[@[Monat_kurz]];
[@[Monat_kurz]]-rngStartFiskaljahr)+1)/3;0)
Auf dem zweiten Tabellenblatt gibt es zwei Zellen benannte Zellen. Die mit rngStartFiskaljahr benannte Zelle muss auf Werte zwischen 1 und 12 gesetzt werden. Die benannte Zelle rngFYPräfix beinhaltet z. B. “GJ ” für Geschäftsjahr oder “FY ” für fiscal year.
Alle Angaben und Berechnungen sind ohne Gewähr. Also bitte noch einmal prüfen. Vielleicht mag sich auch jemand die Mühe machen und die Feiertage und Ferien für andere Bundesländer eintragen – dies allein war schon irre aufwendig.
So!!! Nun haben wir eine Basis, auf die ich in neuen Videos eingehen werde.
Freue mich auf Feedback bei YouTube und auch Danke an alle, die den Kanal supporten.
Bis bald
Andreas
Feiertage NRW von 2017 bis 2020
Hallo,
in meiner aktuellen Videoreihe zur Jahresübersicht nutzte ich eine Liste von Feiertagen und Ferienzeiten. In meinem Fall für NRW.
Wer die Übungen nachvollziehen möchte, kann auf die folgenden Feiertage (ohne Gewähr) zurückgreifen und diese eventuell sogar mit Power Query auslesen.
Es gibt auch sicher andere Quellen im Netz dafür.
Hier die Feiertage und anderen Ereignisse als Tabelle:
Datum | Ereignis | gesetzlich |
01.01.2017 | Neujahr | ja |
27.02.2017 | Rosenmontag | |
14.04.2017 | Karfreitag | ja |
16.04.2017 | Ostersonntag | ja |
17.04.2017 | Ostermontag | ja |
01.05.2017 | 1. Mai | ja |
25.05.2017 | Christi Himmelfahrt | ja |
04.06.2017 | Pfingstsonntag | ja |
05.06.2017 | Pfingstmontag | ja |
15.06.2017 | Fronleichnam | ja |
03.10.2017 | Tag der Deutschen Einheit | ja |
31.10.2017 | Reformationstag | ja |
01.11.2017 | Allerheiligen | ja |
24.12.2017 | Heiligabend | |
25.12.2017 | 1. Weihnachtstag | ja |
26.12.2017 | 2. Weihnachtstag | ja |
31.12.2017 | Silvester | |
01.01.2018 | Neujahr | ja |
12.02.2018 | Rosenmontag | |
30.03.2018 | Karfreitag | ja |
01.04.2018 | Ostersonntag | ja |
02.04.2018 | Ostermontag | ja |
01.05.2018 | Maifeiertag | ja |
10.05.2018 | Christi Himmelfahrt | ja |
20.05.2018 | Pfingstsonntag | ja |
21.05.2018 | Pfingstmontag | ja |
31.05.2018 | Fronleichnam | ja |
03.10.2018 | Tag der Deutschen Einheit | ja |
01.11.2018 | Allerheiligen | ja |
24.12.2018 | Heiligabend | |
25.12.2018 | 1. Weihnachtstag | ja |
26.12.2018 | 2. Weihnachtstag | ja |
31.12.2018 | Silvester | |
01.01.2019 | Neujahr | ja |
04.03.2019 | Rosenmontag | |
19.04.2019 | Karfreitag | ja |
21.04.2019 | Ostersonntag | ja |
22.04.2019 | Ostermontag | ja |
01.05.2019 | Maifeiertag | ja |
30.05.2019 | Christi Himmelfahrt | ja |
09.06.2019 | Pfingstsonntag | ja |
10.06.2019 | Pfingstmontag | ja |
20.06.2019 | Fronleichnam | ja |
03.10.2019 | Tag der Deutschen Einheit | ja |
01.11.2019 | Allerheiligen | ja |
24.12.2019 | Heiligabend | |
25.12.2019 | 1. Weihnachtstag | ja |
26.12.2019 | 2. Weihnachtstag | ja |
31.12.2019 | Silvester | |
01.01.2020 | Neujahr | ja |
24.02.2020 | Rosenmontag | |
10.04.2020 | Karfreitag | ja |
12.04.2020 | Ostersonntag | ja |
13.04.2020 | Ostermontag | ja |
01.05.2020 | Maifeiertag | ja |
21.05.2020 | Christi Himmelfahrt | ja |
31.05.2020 | Pfingstsonntag | ja |
01.06.2020 | Pfingstmontag | ja |
11.06.2020 | Fronleichnam | ja |
03.10.2020 | Tag der Deutschen Einheit | ja |
01.11.2020 | Allerheiligen | ja |
24.12.2020 | Heiligabend | |
25.12.2020 | 1. Weihnachtstag | ja |
26.12.2020 | 2. Weihnachtstag | ja |
31.12.2020 | Silvester | |
15.02.2021 | Rosenmontag | |
28.02.2022 | Rosenmontag | |
20.02.2023 | Rosenmontag | |
12.02.2024 | Rosenmontag |
Anbei die bisherigen Videotitel:
Videolink zur Preview: https://www.youtube.com/watch?v=6Ou1SD6dAkg
Videolink zu Teil 1: https://www.youtube.com/watch?v=O9nz1yVqeLA
Videolink zu Teil 2: https://www.youtube.com/watch?v=mV4QNy1IXdM
Stickbesitzer können die Dateien auch aus den Verzeichnissen E808 bis E810 ziehen und die Übungen direkt parallel zu den Videos nachvollziehen.
Besten Dank für das Super-Feedback zu diesen Videos. Würde mich freuen, wenn Ihr die Titel Euren Kollegen weiterempfehlt.
Sonnige Grüße
Andreas
Excel – Projektkalender
In einem Kalender soll der ausgewählte Projektzeitraum visualisiert werden.
Die Projekttage sind nachfolgend gelb dargestellt. Arbeitsfreie Zeiten grau und Feiertage Orange.
Zusätzlich heben sich die einzelnen Monate von einander ab.
Excel – Projektkalender – Preview | https://youtu.be/WGvI6GPeuRM |
Excel – Projektkalender – Feiertage aus Outlook übernehmen – Teil 1 | https://youtu.be/ABMvbA4RadM |
Excel – Projektkalender – Arbeitstage auswählen – Teil 2 | https://youtu.be/bvwCsOW8te4 |
Excel – Projektkalender – Kalender dynamisch aufbauen – Teil 3 | https://youtu.be/X3EBCXgpTY8 |
Excel – Projektkalender – Bedingte Formatierung – Monatslinien – Teil 4 | http://youtu.be/fWODm5wPydM |
Excel – Projektkalender – Bedingte Formatierung – Projekttage – Teil 5 | http://youtu.be/mronPMZiHD0 |
Excel – Projektkalender – VBA – Feiertage ausblenden – Teil 6 | http://youtu.be/_8N5fBiz84M |
Excel – Projektkalender – Bedingte Formatierung – Monate abwechselnd einfärben – Teil 7 | https://youtu.be/K5x4shLNsts |
Excel – Projektkalender – Bedingte Formatierung – Ferientage – Teil 8 | https://youtu.be/CscxikTm0qU |
Hier ist der VBA-Teil:
Option Explicit
Sub Ellipse1_Klicken()
With ActiveSheet
.Protect DrawingObjects:=False, Contents:=False
If .Shapes(“Oval 1”).TextFrame2.TextRange.Characters.Text = “>” Then
.Columns(“A:G”).EntireColumn.Hidden = False
.Columns(“U:Z”).EntireColumn.Hidden = False
.Shapes(“Oval 1”).TextFrame2.TextRange.Characters.Text = “<”
Else
.Columns(“A:G”).EntireColumn.Hidden = True
.Columns(“U:Z”).EntireColumn.Hidden = True
.Shapes(“Oval 1”).TextFrame2.TextRange.Characters.Text = “>”
End If
.Range(“I1”).Select
.Protect DrawingObjects:=True, Contents:=True
End With
End Sub
Microsoft Project – Ausnahmen für Kalender per VBA aus Excel importieren
In den jeweiligen Kalendern von Project können Ausnahmen für arbeitsfreie Tage eingetragen werden. Liegt eine Liste mit diesen Ausnahmen in Excel vor, kann diese nicht einfach per Copy und Paste in ihrer Gesamtheit kopiert werden. Schade.
Damit Project auf Excel im VBA zugreifen kann, muss in Extras – Verweise der Zugriff auf Microsoft Excel gewährt werden. Zunächst mit ALT + F11 den VBA-Editor öffnen, dann den Zugriff gewähren.
Anschließend den unten stehenden Code in ein neues Modul kopieren und den Pfad zur Datei anpassen.
Folgender VBA-Code öffnet zunächst eine Excel-Datei und liest anschließend Zeilenweise die Daten der jeweiligen Ausnahmen in die Ausnahmeliste des Kalenders “Standard”:
Sub Feiertage_Importieren()
Dim xlApp As Excel.Application
Dim xlWkb As Workbook
Dim i As Long
Dim Bezeichnung As String
Dim Startdatum As Date
Dim Enddatum As Date
Set xlApp = CreateObject(“Excel.Application”)
Set xlWkb = xlApp.Workbooks.Open(“C:\Users\Andreas\Desktop\KalenderStandard.xlsx”)
i = 2
With xlWkb.Sheets(“Feiertage”)
Do Until .Cells(i, 1).Value = “”
Bezeichnung = .Cells(i, 1).Value
Startdatum = .Cells(i, 2).Value
Enddatum = .Cells(i, 3).Value
ActiveProject.BaseCalendars(“Standard”).Exceptions.Add Type:=1, Name:=Bezeichnung, Start:=Startdatum, Finish:=Enddatum
i = i + 1
Loop
End With
xlWkb.Close
Set xlWkb = Nothing
Set xlApp = Nothing
End Sub
Achtung: Das Makro beinhaltet noch keine Fehlerprozeduren und prüft nicht, ob die Termine eventuell schon vorhanden sind.
Nun kann das Makro z.B. mit Alt + F8 ausgeführt werden.
Unter Projekt – Arbeitszeit ändern lassen sich die neuen Ausnahmen einsehen.
Videolink:
Link zum Video bei YouTube: http://youtu.be/3advDEF3iyo
Excel – PowerPivot – Kalendertabelle für alle Auswertungen
Ein gut gepflegter Kalender sollte mit den Datentabellen verknüpft sein. Zudem ist die Kalendertabelle als Datumstabelle zu markieren und die Sortierreihenfolge für Monate und Wochentage festzulegen.
Welche Informationen sollte eine Kalendertabelle tragen? Im Prinzip alle Informationen, die Sie später auch auswerten möchten.
Hier ein paar Vorschläge
- Datum
- Jahr
- Monat in Zahlen
- Monat ausgeschrieben
- Tag des Monats
- Wochentag als Zahl
- Wochentag ausgeschrieben
- Information zum Wochenende
- Kalenderwoche
- Quartal
- Geschäftsjahr
- Jahr und Quartal
- Jahr und Monat
- Anzahl Tage des Monats
Die Kalendertabelle aus dem Video zum Download:
Kalender PowerPivot
Hier ist das Video:
Videolink: http://youtu.be/FXf0wI4RQfs
Du muss angemeldet sein, um einen Kommentar zu veröffentlichen.