Erster beliebiger Wochentag in einem Monat
Excel, alle Versionen
Die Aufgabe
Es soll für ein gegebenes Datum der erste Sonntag, Montag, Dienstag, … im Monat des entsprechenden Datums gefunden werden.
Diese Aufgabe lässt sich sehr gut per VBA-Makro mit einer selbst definierten Funktion (UDF) lösen. Fügen Sie dazu in ein generelles Modul der aktuellen Arbeitsmappe den (als *.txt-File) hier als *.zip gespeicherten Code ein (bitte nur die entpackte *.txt). Gehen Sie dazu so vor:
- Öffnen Sie nach dem entpacken die Datei mit dem Code.
- Kopieren Sie den kompletten Code der *.txt-Datei in die Zwischenablage.
- Öffnen oder aktivieren Sie bei Bedarf das File, die Arbeitsmappe, wo die Funktion verwendet werden soll.
- Fügen Sie erforderlichenfalls ein Modul ein. Wie das geht, ist beispielsweise hier aufgezeigt.
- StrgV, um in den (eventuell noch) leeren Editor-Bereich den Inhalt der Zwischenablage einzufügen. Sollte der eben kopierte Code nicht mehr in der Zwischenablage sein, entfernen Sie eventuell falsch eingefügte Werte, kopieren Sie noch einmal aus der Text-Datei und fügen dann den Inhalt in den Editor ein. Alternativ können Sie natürlich auch den Code abtippen … 😀
- Wenn Sie mögen, schließen Sie gerne den VBA-Editor. Er wird in dieser Form nicht mehr benötigt.
Als Alternative gibt es noch die Möglichkeit, dass Sie direkt in den VBA-Editor gehen und diese Klassen-Datei direkt über den entsprechenden Menüpunkt importieren, dann liegt alles bereits am richtigen Ort. Da kann dann eigentlich nichts schief gehen … (Die Klassendatei liegt auch in der *.zip, siehe weiter oben, falls Ihr Browser die Datei direkt öffnet und nicht zum Download anbietet.)
Anwendung
Ab sofort kann die eben geschaffene UDF (selbst definierte Funktion) in der aktuellen Mappe an beliebiger Stelle eingesetzt werden.
Angenommen, in A1 steht ein beliebiges Datum. Wichtig ist nur, dass es wirklich ein (serielles) Datum ist und kein Text! Als Beispiel sei das Datum der 06.01.2000 und es soll das erste Wochenende, also der erste Samstag dieses Monats gefunden werden. Geben Sie dann in B1 folgende Formel ein:
=FirstXdayInMonth(A1;„sa”)
Das erste Argument (hier: A1) ist das Datum, welches als Grundlage für die Berechnung dient (hier natürlich die Zelle mit dem Datum). Das muss ein „echtes” Datum sein, sonst wird ein falscher Wert zurück gegeben, nämlich der 00.01.1900 (kein Schreibfehler!). Das zweite Argument ist der Wochentag, welcher zugrunde gelegt werden soll. In der obigen Formel ist das "
sa"
. Hier können Sie Zahlen oder auch Texte verwenden. Für Zahlen gilt: Sonntag = 1, Montag = 2, und der Samstag = 7. Verwenden Sie Texte, dann müssen diese in doppelte Anführungszeichen (sog. Gänsefüßchen) eingefasst werden. Sie können dann die Kurzform "
So"
.. "
Sa"
verwenden oder den Namen des Wochentages voll ausschreiben, also "
Sonntag"
.. "
Samstag"
oder auch „Sonnabend”. Dabei ist Groß- Kleinschreibung nicht relevant, selbst "
diEnsTaG"
wird akzeptiert und korrekt ausgewertet.
Als Ergebnis der Funktion werden Sie eine serielle Zahl erhalten, welche dem berechneten Datum entspricht. Im oben genannten Fall wäre das 36526. Als Datum formatiert wird in der Zelle dann der 01. Januar 2000 dargestellt.
Falls Sie ohne viel Aufwand einmal prüfen wollen, wie solch eine Tabelle aussieht und wie die Funktion angewendet wird, dann laden Sie gerne diese Excel-Datei herunter und achten Sie bitte bei Excel-Versionen ab 2007 darauf, dass ein Makro bzw. VBA-Code ausgeführt werden kann. – Falls Sie diese Funktion öfter in verschiedenen Dateien einsetzen wollen, können Sie den Code auch als Add-In speichern und dann in Ihr Excel einbinden. Hinweise dazu finden Sie hier und auch hier im Blog.
Hinweis: Wie Sie solch eine Funktion einbinden können, erfahren Sie hier im Blog. Selbstverständlich können Sie diese UDF auch als Add-In speichern / erstellen und nach dem Einbinden in allen Excel-Mappen nutzen. Mehr dazu an dieser Stelle für Versionen bis Excel 2003 hier, ab Excel 2007 schauen Sie hier nach.
Hinweise: Selbstredend ist es möglich, die Funktion so umzugestalten, dass auch als Text vorliegende kalendarische Datumswerte akzeptiert werden. Sollte es erforderlich sein, dass mehrere Formen der übergebenen Daten korrekt ausgewertet werden, steht Ihnen unser Sponsor GMG Computer-Consulting gerne zur Seite. Eine Mail an uns werden wir gerne weiterleiten. – Und zweitens: Stören Sie sich bitte nicht an dem englischsprachigen Namen der Funktion. Sie können ihn gerne in einen beliebigen, den Vorgaben entsprechenden Namen ändern. Und last but not least: Bei Bedarf senden wir Ihnen gerne die Datei auch im 2003er-Format (*.xls) zu.
Rückmeldungen / Feedback gerne per Mail an mich (G.Mumme@Excel-ist-sexy.de)
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00 € freuen … (← Klick mich!)