Anzeige
Archiv - Navigation
1900to1904
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufendes Schichtsystem

Laufendes Schichtsystem
27.09.2022 12:53:42
Jörn
Hallo,
ich möchte gern die bestimmt 1000-sendste :) Anwesenheit in Excel generieren.
Wir haben ein wildes Schichtsystem, welches über 4 Wochen läuft und dann wieder beginnt.
Dies habe ich auf einem separaten Blatt eingegeben und von 1 bis 28 durchnummeriert.
Jetzt wollte ich das ich am 1. Januar eine Schicht eingebe und sich das Schichtsystem bis 31.12. selbst ergänzt.
Und da häng ich nun, mit einer Hilfsspalte hab ich es hinbekommen, ist aber eine Krücke. Ich zähle in der Hilfsspalte bis 28 und fange wieder bei 1 an, dann wird über einen Sverweis die Schicht eingetragen.
Hat sich damit schon jemand befasst, bin für jeden Tipp dankbar .
VG Jörn

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufendes Schichtsystem
27.09.2022 13:18:59
Armin
Hallo,Jörn,
lade doch bitte ein Beispiel hoch wie es aussehen soll.
Grüße Armin
AW: Laufendes Schichtsystem
27.09.2022 14:10:50
Jörn
Hallo,
bin hier auf der Arbeit, darf hier nichts hochladen, vielleicht heut abend.
Vielleicht kann ja jemand per VBA helfen. WIe gesagt, die Schichten wiederholen sich alle 28 Tage. Ich möchte gern in eine Zelle die Startschicht eingeben und die folgenden Zellen sollen dann mit dem Schichtsystem laut Vorgabe gefüllt werden und nach 28 TAgen wieder von vorn.
VG jörn
AW: Laufendes Schichtsystem
27.09.2022 15:52:27
Herbert_Grom
Hallo Jörn,
gerade für VBA braucht man Parameter und die gibt es am Besten in einer Beispielarbeitsmappe.
Servus
AW: Laufendes Schichtsystem
27.09.2022 19:34:52
Jörn
Hallo,
jetzt hab ich die Datei erstellt und sie lässt sich nicht zum hochladen auswählen, muss sie gezippt werden oder sowas :( Arbeite mit einem Mac, falls es daran liegen könnte?
VG Jörn
Anzeige
AW: Laufendes Schichtsystem
28.09.2022 12:25:21
Jörn
Oha , vielen Dank, dachte schon das schaut sich keiner mehr an ;)
Seh ich das richtig , es wird ohne Hinblick auf das Datum das Schichtsystem fortlaufend eingetragen, abhängig von der 1. Schicht.
Sieht schonmal sehr gut aus.
Wäre auch fast ausreichend, aber es wir keine "leere Schicht" erkannt, welche ja auch häufig vorkommt. Und ich brauche die Abhängigkeit vom Wochentag um zu wissen wo im Schichtsystem ich grad bin.
Sorry, ich kann es nicht besser erklären .
VG Jörn
Anzeige
AW: Laufendes Schichtsystem mit Formel
28.09.2022 10:41:46
Sigi.21
Hallo Jörn,
meine Lösung mit Formel, sofern ich dein Anliegen richtig verstanden habe. (s. Mappe)
Ich könnte dies auch in eine VBA-Fkt. packen, dies wäre dann leichter anzuwenden. Falls gewünscht, bitte melden.
Gruß Sigi
https://www.herber.de/bbs/user/155416.xlsx
AW: Laufendes Schichtsystem mit Formel
28.09.2022 12:32:51
Jörn
HAllo Siggi,
vielen Dank dafür !
Das haut ja hin , damit komm ich glaub ich klar , obwohl ich neugierig auf die VBA Variante bin, wenn Du so nett wärst ;)
Super nett wäre, wenn Du mir die Formel erläutern könntest, nur wenn Du dafür kein Roman schreiben musst :)
VG Jörn
Anzeige
AW: Laufendes Schichtsystem mit VBA-Fkt
28.09.2022 13:22:04
Sigi.21
Hallo Jörn,
Erläuterung zur Formel:
Du hast 28 Schichten, diese kannst du mit Wahl(Nr; "F"; etc.) auslesen. Jetzt brauchst du noch die richtige Nr für Wahl.
Ein Datum ist in Excel ja nur eine Zahl; also kannst du mit Rest(Datum;28) eine Nr ermitteln. Rest liefert allerdings 0-27 und da ist ja noch die Startnummer u. das Startdatum. Da musst du jetzt nur noch den Zusammenhang erkennen, und die Differenz ermitteln, und dann bei Nr berücksichtigen.
Bei meiner Formel ist noch ein kl. Fehler: Da steht in E5:
" =WENN( UND($B5(größergleich)E$2; UND($C5(größer)0;$C5(kleiner)28)); WAHL ..... etc."
richtig ist:
" =WENN( UND($B5(größergleich)E$2; UND($C5(größer)0;$C5(kleiner)29)); WAHL ..... etc."
Sonst wird die Startschicht 28 nicht berücksichtigt.
Anbei die Lösung mit VBA-Fkt. (s. Mappe)
Gruß Sigi
https://www.herber.de/bbs/user/155425.xlsm
Anzeige
AW: Laufendes Schichtsystem mit VBA-Fkt
28.09.2022 14:20:51
Jörn
Hallo Sigi,
du bist der Größte :), ...vielen Dank!
Ich glaub hab die Formel durchschaut , hab 's mal zerlegt und dann hab ichs geschnallt ;) Das mit dem Rest kannte ich nicht und denn Loop auch nicht.
Wieder was gelernt, tolles Forum, tolle Leute.
Heut abend schau ich mal in den VBA Code.
Danke!
Gruß Jörn
Danke für Rückäußerung und Lob! o.w.T
28.09.2022 14:59:52
Sigi.21
AW: Laufendes Schichtsystem mit VBA-Fkt
29.09.2022 10:13:09
Jörn
Hallo Sigi,
ich muss nochmal um etwas bitten.
Ich hab versucht aus dem VBA Code den ersten Part, also das Startdatum zu löschen, dies hat leider nicht geklappt.
Könntest Du den Code anpassen, sodass nur das Schichtsystem und eine StartNr nötig sind, die würde ich dann einfach fest eintragen. (Entweder in die Formel oder eine Zellverknüpfung)
=Schichtfolge(Nr_der_Startschicht As Long, Lfd_Datum As Date)
Die Nr der Startschicht würde praktisch den Start zwischen 1-28 festlegen und anhand des Lfd_Datums würde dann ja weitergezählt werden.
Hoffentlich verstehst Du was ich meine ;) Wenn nicht komm ich mit deiner bisherigen Lösung auch so super zurecht.
Gruß Jörn
Anzeige
AW: Laufendes Schichtsystem mit VBA-Fkt
29.09.2022 19:11:26
Sigi.21
Hallo Jörn,
die Funktion braucht ein Startdatum, denn davon ausgehend wird ja der Zyklus (!) berechnet.
Man könne zwar ein feststehendes (unveränderliches) Datum fix als Stardatum einbauen. Bsp. der 01.01.2022 oder gar der 01.01.2001 = 1. Tag des 3. Jahrtausends; so wie bei UNIX der 01.01.1970 als Startdatum dient. Aber wie willst du dann feststellen, welche Nr der Startschicht du brauchst. Willst du dann immer auf dieses Datum zurückrechnen?
Gruß Sigi
AW: Laufendes Schichtsystem mit VBA-Fkt
01.10.2022 11:54:11
Jörn
Hallo Sigi,
ich hab es jetzt irgendwie hinbekommen. Ist sicher keine saubere Programmierung, aber es funktioniert, vielleicht magst mal drüber schauen ;)

Function Schichtvier(Nr_der_Startschicht As Long, Lfd_Datum As Date) As String
Dim i As Long, df As Long
Dim ABC As Variant
If Nr_der_Startschicht > 0 And Nr_der_Startschicht 

=Schichtvier(10;C2)
Man gibt jetzt in der Formel einmalig die Zahl ein mit der man startet und dann läuft das Schichtsystem los. Man muss halt probieren wo man grad am Starttag ist.
Super wäre, man am Starttag, z.Bsp. Mo, der 10.10., ein N eingibt und das Makro schaut wo man sich im Schichtsystem grad befindet, also zwischen 1 und 28.
In dem Fall wäre es die 15. Die 15 würde dann in den folgenden Tagen auf die Function angewendet werden.
So bräucht man nur noch nach dem Tagesdatum schaun um die Schicht zu ermitteln :)

=Schichtvier(C2)
Wenn du Lust und Zeit hast, würde mich freuen wenn Du es hinbekommst :) Für mich ist das leider 5 Nummern zu kompliziert, nervt mich ein wenig aber ich lerne immer mehr.
Ich wünsche ein schönes, langes Wochenende, auch wenn das Wetter gruselig ist ;)
VG Jörn
Anzeige
AW: Laufendes Schichtsystem mit VBA-Fkt
01.10.2022 19:35:04
Sigi.21
Hallo Jörn,
der Sinn mit dem Startdatum ist ja, dass du die Nr_Startschicht klar und eindeutig zuordnen kannst und weißt, dass von da an weitergerechnet wird.
Wenn du aber sowieso nur durch "Versuch und Irrtum" eine StartNr eingibst, dann kannst du natürlich auf das Startdatum verzichten. Dann brauchst du aber auch keine "solche Krücke" wie die 3987. Das ist dann sowieso nur überflüssiger Ballast. Dann geht's auch schlank:

Function Schichtvier(Lfd_Datum As Date, StartNr As Long) As String
Dim i As Long, df As Long, ABC As Variant
If StartNr > 0 And StartNr 
Gruß Sigi
Anzeige
AW: Laufendes Schichtsystem mit VBA-Fkt
01.10.2022 20:07:03
Jörn
Hi Sigi,
cool, ich wußte du machst das schlanker ;) Ja, hab das Startdatum rausgenommen, weil es ja eigentlich nur einmal gebraucht wird und man es sonst über alle Tage mitnehmen würde, so reicht das vollkommen.
Konntest Du mal in meine Datei schauen, hatte da so ne Idee wie man die Startzahl anhand der Ersten Schicht ermitteln könnte. Ich kann meinen Mitarbeitern schlecht vermitteln, dass sie durch Versuchen einer Zahl zu ändern die richtige Schicht einstellen können.
Sie sollen praktisch die erste Schicht eingeben und dann füllen sich die folgenden Tag mit dem Schichtsystem, habs mal umständlich mit Formeln gemacht.
https://www.herber.de/bbs/user/155482.xlsm
VG Jörn und vielen Dank nochmal!!!
Anzeige
AW: Laufendes Schichtsystem mit VBA-Fkt
01.10.2022 20:50:36
Sigi.21
Hallo Jörn,
nur mit Lfd_Datum allein wird es nicht gehen. Du brauchst immer zumindest eine Verschiebe-Nr für deine Schichtfolge; sonst wäre die Schichtfolge für jeden MA gleich.
Zitat: "Sie sollen praktisch die erste Schicht eingeben und dann füllen sich die folgenden Tage mit dem Schichtsystem."
Also, wenn der MA z. Bsp. ein "F" eingibt, stellt sich doch die Frage welche Schichtfolge soll das sein? Es gibt ja 7 mal das "F" in der Schichtreihe 1-28. Deshalb brauchst du auf jeden Fall eine VerschiebeNr mit der du die Schichtfolge hin- oder herschieben kannst. Ich hab' sie mal DiffNr genannt und dir 2 Fkt. eingestellt. Einmal mit FSN-Folge und eine weitere mit der Nr-Folge, da kannst du sofort ablesen, in welche Richtung du verschieben musst, bis du die richte Schicht vorliegen hast. (s. Mappe)
Gruß Sigi
https://www.herber.de/bbs/user/155483.xlsm
Anzeige
AW: Laufendes Schichtsystem mit VBA-Fkt
02.10.2022 12:13:12
Jörn
Hallo Sigi,
hattest Du mal in meine Datei geschaut ?
https://www.herber.de/bbs/user/155482.xlsm
"welche Schichtfolge soll das sein? Es gibt ja 7 mal das "F" in der Schichtreihe 1-28." Das ist so nicht richtig, das F gibt es zwar 7x aber wenn man es in Verbindung mit dem Wochentag sieht ist jede Schicht einmalig. Auch wenn gar keine Schicht stattfindet , könnte man sicher sagen welche Schicht am Folgetag anliegt, wenn man weiss welcher Wochentag grad ist. Ich hatte das mit einem Sverweis mit 2 Bedingungen gelöst, hab aber leider keine Ahnung wie man das in VBA umsetzen kann :( Man müsste also schauen welcher Wochentag ist, z.Bsp Mo und dann schauen welche Schicht eingetragen ist, z.Bsp. S, dann ergibt sich der Start für Dienstag mit S. Und für dieses S brauchen wir die Nr im Schichtsystem . Schreibt sich einfach, ist es aber wahrscheinlich nicht.
Wenn Du Lust hast kannst Du gerne weiter helfen, würd mich freuen.
Schau bitte mal in meine Datei, das 2. Tabellenblatt ermittelt die Startnr. anhand der ersten eingegebenen Schicht, das wäre der VBA-Part den ich benötige.
VG Jörn
AW: Laufendes Schichtsystem mit VBA-Fkt
02.10.2022 13:47:35
Jörn
Hallo Sigi,
schaust Du bitte mal warum das nicht funktioniert. Ich vergleiche Wochentag +Schicht, am ersten Tag, also DiF ist Dienstag Frühschicht. Und hab versucht mit case die Laufende Zahl im Schichtsystem zu ermitteln, sollte dann i sein. Und das i + lfd Datum ergibt c welches im Array die Schicht ausgibt.
Case müsste das noch bis 28 erweitert werden ;)

Function neu(Lfd_Datum As Date) As String
Dim WT As Variant, ST As Variant, Start As Variant, i As Long, c As Long
WT = Format(Range("E2").Value, "DDD")
ST = Range("E5").Value
Start = WT & ST
Select Case Start
Case "MoF"
i = 1
Case "DiF"
i = 2
Case "MiS"
i = 3
Case "DoS"
i = 4
End Select
If i > 0 And i 
VG Jörn
AW: Laufendes Schichtsystem mit VBA-Fkt
03.10.2022 17:35:23
Sigi.21
Hallo Jörn,
es freut mich, dass du so motiviert bist und munter weiter probierst.
Aus einer Funktion heraus einen fixen Bereich (wie Range("E2")) auf der Tabelle anzusprechen, ist kein guter Programmierstil! Ja geradezu verboten.
Bei einer Funktion werden alle notwendigen Parameter über die Funktion (=Schicht (StartDatum; LfdDatum) eingegeben, eben wie bei einer normalen Excelfunktion (=Kalenderwoche(Datum;21).
Bei deiner Schicht-Funktion brauchst du neben dem lfdDatum immer(!) einen weiteren Parameter. Das kann die DiffNr sein oder das StartDatum. Die Funktion muss ja erfahren, wo die 1. Schicht beginnt!
Anschließend mein letzter Vorschlag:

Function Schicht4(StartDatum As Date, Lfd_Datum As Date) As String
Dim ABC As Variant, i As Long
ABC = Array("F", "F", "S", "S", "N", "N", "N", "", "", "F", "F", "S", "", "", _
"N", "N", "", "", "F", "F", "F", "S", "S", "N", "N", "", "", "")
If Lfd_Datum >= StartDatum Then
i = (Lfd_Datum - StartDatum) Mod 28
Schicht4 = ABC(i)
Else
Schicht4 = ""
End If
End Function
Gruß Sigi
AW: Laufendes Schichtsystem mit VBA-Fkt
03.10.2022 17:59:58
Jörn
Hallo Sigi,
vielen Dank nochmal das Du soviel Geduld mit mir hattest und ich Dir deine Zeit rauben durfte ;)
Du hast mir super geholfen und ich komme mit deinem letzten Lösungsvorschlag super zurecht.
...hab noch einen schönen Feiertag!
Bis bald mal, VG Jörn

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige