Clever-Excel-Forum

Normale Version: Makro mit Variabler Spallte
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi
ich bin neu auf dem Forum.
 Bin bei der Urlaubsplanung der Firma dran, und möchte da vorausschauend (für die nächsten Jahre) arbeiten.

Folgendes Problem:
Es gibt mehrere Schichten in der Abteilung, Schicht 1-5 und die Frühschichten 1-3.
Die Schichten haben einen 10-Tage Rhythmus. 6 Tage arbeiten, 4 Tage frei. Ich möchte, dass Excel automatisiert nach 6 Zellen bei den nächsten 4 einen grauen Hintergrund einfärbt. Ein einfacher Buchstabe (X) ginge auch, das kann ich ja dann mit bedingter Formatierung machen.

Bei den Frühschichten gleiches Problem, nur ein anderer Rhythmus (5 Arbeit, 2 Frei, 5 Arbeit, 3Frei, 4 Arbeit, 3 Frei)


Außerdem soll das Makro beim letzten Datum der Spalte B (ist variabel, Jahresende) aufhören.

Idealerweise startet es komplett automatisch bei neuer Eingabe in (B3) in dem das Jahr steht, aber das muss nicht xD


Ich denke da an 2 makros, 1 für die Schichten, 1 für die Frühschichten, dann würde ich zum Intervall-anfang gehen und das Makro starten. Bin aber für Anregungen offen. Vielleicht gibt es ja etwas simpleres?

Hier noch ein Überblick der Kreuztabelle (X=frei):

                        2020                1.1    2.1   3.1   4.1   5.1   6.1   7.1   8.1   9.1   10.1   11.1   12.1   13.1   14.1   15.1   16.1   17.1   18,1   19.1   20.1   21.1   22.1
Max  (Schicht1)                          X       X      X     X                                                     X        X        X       X
Moritz (Schicht 2)                                        X     X     X      X                                                          X       X      X        X 
Günther (Frühschicht 1)                                                     X      X                                                  X       X                                           x         x       x       


Einen Ansatz in welche ich mir durchlesen sollte geht auch klar Blush
Hallo David,

beiliegend 2 Makros (s. Mappe).  Die Startzelle markieren und dann Makro starten.

Sigi
Hallöchen,

das geht sicher auch ohne VBA. Haben denn die Kollegen immer die gleiche Schicht, also Günter ist Dauerfrühschichtler usw? Du solltest aber bedenken, dass man ja nicht jedes jahr gleich beginnen kann, also z.B. beginnt Günter jedes Jahr am 6.1. mit dem Rhythmus der Frühschicht.

Hier mal ein Beispiel. Die Schicht S1 hat hier einen Rhythmus von 11 Tagen und geht dann von vorne los. Den Rhythmus hab ich in einer gesonderten Tabelle aufgeführt. Die Verrechnung der 11 Tage hab ich in der Formel mit UNTERGRENZE verarbeitet. Wenn Du was mit einer anderen Tageszahl hast, definierst Du das Muster und nimmst statt der 11 die entsprechende Zahl. Die entsprechende Schichtzeile könnte man auch per Formel ermitteln, ich hab hier einfach mal nur eine Zeile definiert und entsprechend die 1 in der INDEX-Formel.


Arbeitsblatt mit dem Namen 'Tabelle2'
ABCDEFGHIJKLMNOP
1NameSchicht01. Jan02. Jan03. Jan04. Jan05. Jan06. Jan07. Jan08. Jan09. Jan10. Jan11. Jan12. Jan13. Jan14. Jan
2OttoS1AA00A0AAA0AAA0
3
4
5
6
7123456789101112131415
8S1AAAAAAA
9

ZelleFormel
C2=INDEX($B$8:$L$8;1;SPALTE(A1)-(UNTERGRENZE(SPALTE(A1)-1;11)))
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg
(22.07.2020, 19:39)Sigi.21 schrieb: [ -> ]Hallo David,

beiliegend 2 Makros (s. Mappe).  Die Startzelle markieren und dann Makro starten.

Sigi
Das funktioniert ja RICHTIG super. Danke schonmal, ich musste bei der frühschicht den Intervall etwas anpassen, habe mich da bei der Frage falsch ausgedrückt. habe das aber hinbekommen :)ielen vielen dank.

Jetzt habe ich noch eine kurze Frage zu einer (kleinen) Änderung:
Wie ändere ich das Makro, sodass er immer nur in die 4 unteren Zellen ein "x" hinterlegt? Confused

Hier das Makro


Sub SchichtEintragen()
Dim i As Long, n As Long, s As Long, f As Long
Dim Zelle As Range
        Set Zelle = ActiveCell
        n = 0
        Do
            For s = 1 To 6
                Zelle.Offset(0, n) = ""
                n = n + 1
                If n > 365 Then End
            Next s
            For f = 1 To 4
                Zelle.Offset(0, n) = "x"
                n = n + 1
                If n > 365 Then End
            Next f
        Loop Until n > 365
        Set Zelle = Nothing
End Sub


Grüße :)
Hallo David,

was meinst du mit  "sodass er immer nur in die 4 unteren Zellen ein "x" hinterlegt?" Das verstehe ich nicht.
Die Regel war doch:  "Die Schichten haben einen 10-Tage Rhythmus. 6 Tage arbeiten, 4 Tage frei."  Also 6 Tage Arbeit (=blank) und 4 Tage frei (="x").


Sigi
Alsoo,
ich bin jetzt natürlich auf den geschmack der "automatisierung" gekommen :)

Jede Schicht belegt 4 Zeilen. Danach eine "Trennspalte".

Schicht1
Jürgen
David
Mathis
(LEER)
Schicht2
Kevin
(LEER)
(LEER)
(LEER)


Ich möchte die Startzelle in der Zeile "Schicht" auswählen und von da aus das Makro starten. Dieses soll die unteren 4 Spalten nach den schon besprochenen Intervall ausfüllen.
Ich hoffe das ist verständlicher Blush
Hallo David,

dass MAKRO kennt die Startzeitpunkte der jeweiligen Mitarbeiter nicht! Diese müssen von Hand festgelegt werden. Dafür musst du das Makro halt 4-5 mal starten. Oder haben alle den gleichen Startpunkt? Dann kopiere einfach nach unten!

Sigi