Datumsbereiche separieren

Reisebüro – Saisondaten splitten

In einem Forum wurde um einen Lösungsansatz nachge­fragt, wie aus ein­er gegebe­nen Reisezeit die Tage der Vor- und der Haupt­sai­son berech­net wer­den kön­nten. Da ähn­liche kalen­darische Zuord­nun­gen öfter ein­mal gefragt sind, habe ich dieses konkrete Beispiel ver­wen­det 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 wirk­lich trans­par­ent, wenn Sie nicht tief in der Excel- und Formel­ma­terie drin steck­en. Das gilt zwar auch, wenn Sie noch nie im Leben eine Zeile ein­er beliebi­gen Pro­gram­mier­sprache geschrieben haben, aber oft find­et sich jemand, der kleine Änderun­gen am Code vornehmen kann. Denn wir pro­gram­mieren bewusst so, dass ein hohes Maß an Über­sichtlichkeit gegeben ist. Selb­st dann, wenn der Code dadurch länger wird und vielle­icht einige hun­dert­s­tel Sekun­den länger braucht.

Nach­trag aus dem Spät­som­mer 2021: Eine gute Möglichkeit ist auch der Ein­satz von Pow­er Query (sofern möglich). Dabei kann auf VBA verichtet wer­den.

▲ nach oben …

Die Aufgabe

Es soll eine Tabelle erstellt wer­den, wo für einen einzu­tra­gen­den Zeit­bere­ich und ein­er Region berech­net wird, wie viele Tage der Reisezeit in die Neben- und/oder die Haupt­sai­son fall­en. Es ist dur­chaus denkbar, dass die Anreise in die eine und die Abreise in die andere Sai­son fällt. Gezählt wer­den immer die Über­nach­tun­gen, was prinzip­iell immer ein Tag weniger ist als die gesamte Reisezeit. Die Uhrzeit der Ankun­ft ist nicht rel­e­vant, es gilt immer der Tag, welch­er als Anreise gebucht wurde.

▲ nach oben …

Die Realisierung

Grund­sät­zlich muss erst ein­mal eine Daten­ba­sis geschaf­fen wer­den, wo für die ver­schiede­nen Regio­nen die Zeit­en der Vor- und der Haupt­sai­son erfasst sind. Die Anzahl der Wech­sel ist beliebig und wird durch das Pro­gramm selb­st erfasst. Es ist aber darauf zu acht­en, dass jed­er denkbare Zeitraum ein­er Reise in dem entsprechen­den Tabel­len­bere­ich erfasst wird. In der Muster-Datei sieht das so aus:

Tabelle mit Anfang und Ende einer Saison

Tabelle mit Anfang und Ende ein­er Sai­son

Sie erken­nen, dass für jede Region vier Inter­valle erfasst sind, zeilen­weise jew­eils Beginn und Ende der Neben- und Haupt­sai­son. Die kalen­darischen Dat­en müssen natür­lich ohne Lück­en vor­liegen. Der Ein­fach­heit hal­ber sind hier Kurzzeiträume für beispiel­sweise Feiertage nicht extra aufge­führt, kön­nten aber prob­lem­los im zeitlich passenden Rah­men einge­fügt wer­den. Jede Region kann auch unter­schiedlich viele Zeilen aufweisen, das wird seit­ens des Makros alleine erkan­nt. Es ist möglich, auch beispiel­sweise eine Nach­sai­son zu inte­gri­eren, dazu muss aber der Code angepasst wer­den. Die Regio­nen kön­nen Sie benen­nen, wie Sie möcht­en. Bei der Berech­nung muss dann nur der entsprechende Name ver­wen­det wer­den.

Zur Berech­nung gibt es einen geson­derten Eingabebere­ich und eine Schalt­fläche. Im Muster sieht das so aus:

Bereich für die Auswertung

Bere­ich für die Auswer­tung

Der User trägt Start, Ende und die Region ein und klickt dann auf die Schalt­fläche Berech­nen. Umge­hend wird durch das Makro in J2:K2 das Ergeb­nis für die Tage der Neben- und der Haupt­sai­son einge­tra­gen. Das war’s dann auch schon.

▲ nach oben …

Die Muster-Tabelle

Damit Sie auch etwas exper­i­men­tieren und das Ganze nachvol­lziehen kön­nen, laden Sie sich hier die Musterta­belle herunter. Dort ist auch der VBA-Code inte­gri­ert. Denken Sie bitte daran, dass Sie in Excel-Ver­sio­nen nor­maler­weise die Makros extra „erlauben” müssen, Hin­weise dazu find­en Sie hier im Blog. Anse­hen und ändern kön­nen Sie sich die Pro­gram­mzeilen des in dieser Mappe ver­wen­de­ten Codes über AltF11.

Damit nicht verse­hentliche Änderun­gen vorgenom­men wer­den kön­nen, die dann zum Ver­lust der Funk­tion­al­ität führen, soll­ten Sie alle Zellen, die eine Formel enthal­ten, gegen Eingaben und Verän­derun­gen sper­ren. Welche Zellen das sind, kön­nen Sie recht ein­fach fest­stellen: F5 und es erscheint dieses Fen­ster:

Der erste Schritt: GeheZu

Der erste Schritt: GeheZu

Jet­zt auf Inhalte… Klick­en und Sie sehen das:

Auswahl der Zellen mit Formeln

Auswahl der Zellen mit Formeln

Wählen Sie hier die Formeln (bere­its geschehen) und dann OK. Sofort wer­den alle Zellen, welche eine Formel enthal­ten, markiert:

Die markierten Zellen mit den Formeln

Die markierten Zellen mit den Formeln

Dass J2:K2 nicht markiert sind ist kor­rekt, denn dort ste­ht ja keine Formel drin son­dern der berech­nete Wert wird durch das Makro einge­tra­gen. Sie soll­ten erken­nen, was die Formeln bewirken und warum beispiel­sweise in Spalte A nicht jede Zelle eine Formel enthält.

▲ nach oben …

Der VBA-Code

Der hier vor­liegende Code ist nur die Basis dessen, was unbe­d­ingt erforder­lich ist. Für eine sin­nvolle und auch dauer­hafte Sta­bil­ität soll­ten unbe­d­ingt noch Rou­ti­nen einge­baut wer­den, die Fehleingaben durch die Benutzer abfan­gen. So kön­nte ein User statt eines (gülti­gen) Datums in G2 oder H2 irgend etwas anderes ein­tra­gen, Beginn und Ende der Reise ver­tauschen oder eine Region, die gar nicht in der Tabelle existiert hinein schreiben. Das wird auch für Gele­gen­heits-VBA-Pro­gram­mier­er möglich sein. In dieser (kosten­losen) Ver­sion ist das nicht enthal­ten, kann aber gerne durch unseren Spon­sor GMG erstellt wer­den. Weit­ere Anpas­sun­gen zur Erhöhung des Kom­forts wie beispiel­sweise automa­tis­che Erfas­sung und Auswahl der Region in einem Kom­bi­na­tions­feld (Drop­Down) oder andere Erweiterun­gen sind möglich.

Hin­weis: Es ist nicht erwün­scht (erlaubt), dass der­ar­tige Erweiterun­gen des hier ver­wen­de­ten Codes öffentlich in Foren ver­bre­it­et wer­den. Das würde ein Ver­stoß gegen das Urhe­ber­recht bedeuten. Beacht­en Sie hier die Kom­men­tar-Hin­weise im Kopf des Codes. Gegen Foren­hil­fe auf pri­vater Basis ist nichts einzuwen­den.

Der Pro­gramm-Code ist bewusst nur knapp kom­men­tiert. Ein mit VBA erfahren­er User wird den Ablauf ver­ste­hen, denn es wurde auch auf kryp­tis­che Ele­mente verzichtet, die vielle­icht einige hun­dert­s­tel Sekun­den an Zeit­gewinn brin­gen wür­den aber dafür die Trans­parenz enorm beein­trächtigten. Weit­ere Erk­lärun­gen des Codes sind Schu­lun­gen und Sem­i­naren vor­be­hal­ten, wo dieses Beispiel Ver­wen­dung find­en wird. Selb­stre­dend kön­nen Sie auch eine tele­fonis­che oder schriftliche Beratung zu diesem oder einem erweit­erten Pro­gramm­code erhal­ten.

Sollte das Pro­gramm wider Erwarten in ein­er älteren Excel-Ver­sion nicht laufen, dann bit­ten wir um Nachricht. Es ist so gut wie aus­geschlossen, dass dieses Pro­gramm ohne Anpas­sun­gen in Tabel­lenkalku­la­tion­spro­gram­men ander­er Her­steller läuft.

▲ nach oben …

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

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 2,00  freuen … (← Klick mich!)

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.