An anderer Stelle habe ich schon beschrieben, wie man im Kalender Schichtwochen markieren kann. Daraufhin habe ich viele Anfragen bekommen, wie man häufiger wechselnde Schichten kennzeichnen kann. Deshalb habe ich ein Muster erstellt. Das Makro dazu werde ich im folgenden beschreiben. Hierzu ist etwas mehr Theorie erforderlich, als man das von den anderen Themen gewohnt ist. Ich hoffe, das es trotzdem verständlich ist.
Das Makro ordnet dem jeweiligen Datum über eine Schlüsselzahl ein Kürzel zu, dass die jeweilige Schicht kennzeichnet. Das sind die Buchstaben, die man im Bild unten rechts neben dem Datum sieht.
Die Schlüsselzahl wird mit der Formel: =REST(A2;10) berechnet. Der Wert 10 ist abhängig von der Anzahl der verschiedenen Schichtkürzel. Im Beispiel sind das eben 10. Gibt es eine andere Anzahl, muss der Wert angepasst werden. Der Tabellenausschnitt verdeutlicht die Vorgehensweise.
A | B | C | D | |
1 | Datum | Serielle Zahl des Datums | Wert | Zeichen |
2 | 01.01.04 | 37987 | 7 | S |
3 | 02.01.04 | 37988 | 8 | N |
4 | 03.01.04 | 37989 | 9 | N |
5 | 04.01.04 | 37990 | 0 | T |
6 | 05.01.04 | 37991 | 1 | T |
7 | 06.01.04 | 37992 | 2 | - |
8 | 07.01.04 | 37993 | 3 | - |
9 | 08.01.04 | 37994 | 4 | F |
10 | 09.01.04 | 37995 | 5 | F |
11 | 10.01.04 | 37996 | 6 | S |
Formeln der Tabelle | ||||
|
Die Schlüsselzahlen die aus dem Datum errechnet werden, sind immer ganzzahlig, der kleinste Wert ist immer 0. Das nutzen wir, um über ein Array die Kürzel mit dem Datum zu verknüpfen. Es muss also auf einem Tabellenblatt eine datumreihe erstellt werden, in der alle Schichten, die vorkommen können, dem richtigen Tag zugeordnet werden. Dabei kommt dem Nullwert und dem dazu gehörigen Kürzel die Schlüsselrolle zu. Deshalb habe ich beide rot markiert.
Normalerweise ist es so, dass die Felder eines Array immer mit dem Wert 0 anfangen zu zähelen. (Es gibt da zwar Ausnahmen, die möchte ich hier aber ausklammern, da es nur verwirren würde). Im Quelltext werden die Kürzel im Array beginnend mit dem neben dem Nullwert stehenden Buchstaben eingetragen, Es folgt dann der dem Wert 1 zugeordnete und so weiter, in unserem Beispiel bis zum 10. Wert, das ist die 9.
Das sieht so aus: sk = Array("T", "T", "-", "-", "F", "F", "S", "S", "N", "N")
Das Makro:
Mit der geschachtelten Schleife, werden die Werte in den Kalender übertragen. Dabei ruft die äußere Schleife (For sp = 2 To 35 Step) die Spalten auf, in die die Kürzel geschrieben werden. For s = 0 To ziel - 3 berechnet die Feldwerte für die Variablen. Im Abschnitt über das Rechnen mit Datum und Uhrzeit habe ich beschrieben, dass hinter jedem Datum eine Zahl steht. Da machen wir uns zu Nutze. Im vorliegenden Beispiel gibt es 10 Schichtkürzel. Entsprechend wird die Zahl hinter dem Datum mit der Formel: we = Cells(s + 3, sp - 1) Mod 10 durch zehn geteilt. Wobei uns die Formel nur den ganzzahligen Rest dieser Berechnung liefert, es ist die VBA-Entsprechung der Formel: =REST(A2;10) die zu Anfang im Tabellenblatt zur Ermittlung der Werte benutzt wurde. Also Zahlen von 0 bis 9, somit ordnet dieses Ergebnis der Variable sk über den errechneten Wert (we), ein Schichtkürzel zu. Also 0="T", 1="T", 2="-" usw.
Mit dieser Zeile: arr(s, 0) = sk(we) werden die die so "gefüllten" Variablen in ein Array geschrieben. Das ermöglicht es, die Kürzel für jeweils einen Monat auf einen Schlag in den Kalender einzutragen. Wie schon versprochen, werde ich das Thema Array noch ausführlicher behandeln.
Den fertigen Schichtkalender gibt es unter Beispieltabellen zum Download.