Datumsbereiche separieren

Reisebüro – Saisondaten splitten

In einem Forum wurde um einen Lösungsansatz nachgefragt, wie aus einer gegebenen Reisezeit die Tage der Vor- und der Hauptsaison berechnet werden könnten. Da ähnliche kalendarische Zuordnungen öfter einmal gefragt sind, habe ich dieses konkrete Beispiel verwendet und eine Muster-Datei erstellt.

Zugegeben, das Ganze lässt sich auch ohne VBA lösen. Die Formel dazu ist schön lang und nicht wirklich transparent, wenn Sie nicht tief in der Excel- und Formelmaterie drin stecken. Das gilt zwar auch, wenn Sie noch nie im Leben eine Zeile einer beliebigen Programmiersprache geschrieben haben, aber oft findet sich jemand, der kleine Änderungen am Code vornehmen kann. Denn wir programmieren bewusst so, dass ein hohes Maß an Übersichtlichkeit gegeben ist. Selbst dann, wenn der Code dadurch länger wird und vielleicht einige hundertstel Sekunden länger braucht.

▲ nach oben …

Die Aufgabe

Es soll eine Tabelle erstellt werden, wo für einen einzutragenden Zeitbereich und einer Region berechnet wird, wie viele Tage der Reisezeit in die Neben- und/oder die Hauptsaison fallen. Es ist durchaus denkbar, dass die Anreise in die eine und die Abreise in die andere Saison fällt. Gezählt werden immer die Übernachtungen, was prinzipiell immer ein Tag weniger ist als die gesamte Reisezeit. Die Uhrzeit der Ankunft ist nicht relevant, es gilt immer der Tag, welcher als Anreise gebucht wurde.

▲ nach oben …

Die Realisierung

Grundsätzlich muss erst einmal eine Datenbasis geschaffen werden, wo für die verschiedenen Regionen die Zeiten der Vor- und der Hauptsaison erfasst sind. Die Anzahl der Wechsel ist beliebig und wird durch das Programm selbst erfasst. Es ist aber darauf zu achten, dass jeder denkbare Zeitraum einer Reise in dem entsprechenden Tabellenbereich erfasst wird. In der Muster-Datei sieht das so aus:

Tabelle mit Anfang und Ende einer Saison

Tabelle mit Anfang und Ende einer Saison

Sie erkennen, dass für jede Region vier Intervalle erfasst sind, zeilenweise jeweils Beginn und Ende der Neben- und Hauptsaison. Die kalendarischen Daten müssen natürlich ohne Lücken vorliegen. Der Einfachheit halber sind hier Kurzzeiträume für beispielsweise Feiertage nicht extra aufgeführt, könnten aber problemlos im zeitlich passenden Rahmen eingefügt werden. Jede Region kann auch unterschiedlich viele Zeilen aufweisen, das wird seitens des Makros alleine erkannt. Es ist möglich, auch beispielsweise eine Nachsaison zu integrieren, dazu muss aber der Code angepasst werden. Die Regionen können Sie benennen, wie Sie möchten. Bei der Berechnung muss dann nur der entsprechende Name verwendet werden.

Zur Berechnung gibt es einen gesonderten Eingabebereich und eine Schaltfläche. Im Muster sieht das so aus:

Bereich für die Auswertung

Bereich für die Auswertung

Der User trägt Start, Ende und die Region ein und klickt dann auf die Schaltfläche Berechnen. Umgehend wird durch das Makro in J2:K2 das Ergebnis für die Tage der Neben- und der Hauptsaison eingetragen. Das war’s dann auch schon.

▲ nach oben …

Die Muster-Tabelle

Damit Sie auch etwas experimentieren und das Ganze nachvollziehen können, laden Sie sich hier die Mustertabelle herunter. Dort ist auch der VBA-Code integriert. Denken Sie bitte daran, dass Sie in Excel-Versionen normalerweise die Makros extra „erlauben“ müssen, Hinweise dazu finden Sie hier im Blog. Ansehen und ändern können Sie sich die Programmzeilen des in dieser Mappe verwendeten Codes über AltF11.

Damit nicht versehentliche Änderungen vorgenommen werden können, die dann zum Verlust der Funktionalität führen, sollten Sie alle Zellen, die eine Formel enthalten, gegen Eingaben und Veränderungen sperren. Welche Zellen das sind, können Sie recht einfach feststellen: F5 und es erscheint dieses Fenster:

Der erste Schritt: GeheZu

Der erste Schritt: GeheZu

Jetzt auf Inhalte… klicken und Sie sehen das:

Auswahl der Zellen mit Formeln

Auswahl der Zellen mit Formeln

Wählen Sie hier die Formeln (bereits geschehen) und dann OK. Sofort werden alle Zellen, welche eine Formel enthalten, markiert:

Die markierten Zellen mit den Formeln

Die markierten Zellen mit den Formeln

Dass J2:K2 nicht markiert sind ist korrekt, denn dort steht ja keine Formel drin sondern der berechnete Wert wird durch das Makro eingetragen. Sie sollten erkennen, was die Formeln bewirken und warum beispielsweise in Spalte A nicht jede Zelle eine Formel enthält.

▲ nach oben …

Der VBA-Code

Der hier vorliegende Code ist nur die Basis dessen, was unbedingt erforderlich ist. Für eine sinnvolle und auch dauerhafte Stabilität sollten unbedingt noch Routinen eingebaut werden, die Fehleingaben durch die Benutzer abfangen. So könnte ein User statt eines (gültigen) Datums in G2 oder H2 irgend etwas anderes eintragen, Beginn und Ende der Reise vertauschen oder eine Region, die gar nicht in der Tabelle existiert hinein schreiben. Das wird auch für Gelegenheits-VBA-Programmierer möglich sein. In dieser (kostenlosen) Version ist das nicht enthalten, kann aber gerne durch unseren Sponsor GMG erstellt werden. Weitere Anpassungen zur Erhöhung des Komforts wie beispielsweise automatische Erfassung und Auswahl der Region in einem Kombinationsfeld (DropDown) oder andere Erweiterungen sind möglich.

Hinweis: Es ist nicht erwünscht (erlaubt), dass derartige Erweiterungen des hier verwendeten Codes öffentlich in Foren verbreitet werden. Das würde ein Verstoß gegen das Urheberrecht bedeuten. Beachten Sie hier die Kommentar-Hinweise im Kopf des Codes. Gegen Forenhilfe auf privater Basis ist nichts einzuwenden.

Der Programm-Code ist bewusst nur knapp kommentiert. Ein mit VBA erfahrener User wird den Ablauf verstehen, denn es wurde auch auf kryptische Elemente verzichtet, die vielleicht einige hundertstel Sekunden an Zeitgewinn bringen würden aber dafür die Transparenz enorm beeinträchtigten. Weitere Erklärungen des Codes sind Schulungen und Seminaren vorbehalten, wo dieses Beispiel Verwendung finden wird. Selbstredend können Sie auch eine telefonische oder schriftliche Beratung zu diesem oder einem erweiterten Programmcode erhalten.

Sollte das Programm wider Erwarten in einer älteren Excel-Version nicht laufen, dann bitten wir um Nachricht. Es ist so gut wie ausgeschlossen, dass dieses Programm ohne Anpassungen in Tabellenkalkulationsprogrammen anderer Hersteller läuft.

▲ nach oben …

Dieser Beitrag wurde unter Datum und Zeit, Mit VBA/Makro, Musterlösungen, Tabelle und Zelle abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.