Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1332to1336
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

Schichteinteilung

Schichteinteilung
01.10.2013 09:24:15
Michael
Hallo zusammen,
ich habe folgendes Problem mit einem Schichtplan und kann einfach nicht den richtigen Ansatz für die Lösung finden.
Ich habe eine Tabelle „Urlaub“. Darin sind die Mitarbeiter (ca. 150) und jeder Tag des Jahres aufgelistet. Wenn ein Mitarbeiter Urlaub hat oder krank ist wird dies eingetragen (U oder K), wenn nicht, bleibt die entsprechende Zelle leer.
In der Tabelle „Schichtplan“ soll nur eine auszuwählende Kalenderwoche (gelbes Feld) erscheinen und dann für jeden Wochentag abgefragt werden, ob bei dem jeweiligen Mitarbeiter in Tabelle „Urlaub“ in dieser Woche ein Eintrag steht. Wenn nicht soll die entsprechende Zelle leer bleiben, damit dort eine Tätigkeit eingetragen werden kann.
Ich finde einfach keinen Weg, wie ich die Auswahl der Kalenderwoche und Mitarbeiter zusammen hinbekomme.
Kann mir vielleicht jemand auf die Sprünge helfen?
Ich habe die Datei hochgeladen:https://www.herber.de/bbs/user/87482.xlsx
Vielen Dank schonmal im Voraus
Michael

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schichteinteilung
01.10.2013 10:15:34
Manuel
Hey,
so dürfte der Code funktionieren. Einzige Bedingung ist das du in der ersten Kalenderwoche noch den Montag hinzufügst damit die Woche auch komplett ist.
Wenn Probleme auftauchen kannst du dich melden.

Option Explicit
Public Sub Schichtplan()
Dim i As Integer
Dim ii As Integer
Dim intWeek As Integer
Dim intColumnsCount As Integer
intWeek = 5 + ((Sheets("Schichtplan").Cells(4, 3) - 1) * 7)
intColumnsCount = Sheets("Urlaub").Cells(3, Columns.Count).End(xlToLeft).Column
intWeek = intWeek - 1
For i = 1 To 7
For ii = 5 To intColumnsCount
If Sheets("Urlaub").Cells(intWeek + i, ii)  "" Then
Sheets("Schichtplan").Cells(ii + 4, i + 3) = Sheets("Urlaub").Cells(intWeek + i, ii) _
End If
Next ii
Next i
End Sub
Gruß Manuel

Anzeige
AW: Schichteinteilung
01.10.2013 10:18:01
Manuel
Habe noch etwas vergessen:

Option Explicit
Public Sub Schichtplan()
Dim i As Integer
Dim ii As Integer
Dim intWeek As Integer
Dim intColumnsCount As Integer
Range("D9:H13").Delete  'Edit: um die alten Einträge zu löschen
intWeek = 5 + ((Sheets("Schichtplan").Cells(4, 3) - 1) * 7)
intColumnsCount = Sheets("Urlaub").Cells(3, Columns.Count).End(xlToLeft).Column
intWeek = intWeek - 1
For i = 1 To 7
For ii = 5 To intColumnsCount
If Sheets("Urlaub").Cells(intWeek + i, ii)  "" Then
Sheets("Schichtplan").Cells(ii + 4, i + 3) = Sheets("Urlaub").Cells(intWeek + i, ii) _
End If
Next ii
Next i
End Sub

Anzeige
AW: Schichteinteilung
01.10.2013 10:34:06
Michael
Hallo Manuel,
vielen Dank für den Code, aber gibt es vielleicht eine Möglichkeit, das Problem mit Funktionen, also ohne VBA zu lösen?
Die Datei soll in einem betrieblichen Netzwerk verwendet werden, da sind Dateien mit Programmcodes nicht so gerne gesehen.
Michael

AW: Schichteinteilung
01.10.2013 10:48:28
Manuel
Sorry hatte nicht gesehen das du das über Excel lösen möchtest. Die Möglichkeit gibt es bestimmt, aber damit kenne ich mich nicht besonders gut aus. Versuch mal das du eine mathematische Formel in verbindung mit der Kalenderwoche und den entsprechenden Zeilen in verbindung setzen kannst. Dann sollte das denke ich nicht sonderlich schwer sein.
Gruß Manuel

Anzeige
AW: Schichteinteilung
01.10.2013 11:02:42
Rudi
Hallo,
1. beginnt eine Woche nach DIN Montags.
2. rechnet die Funktion Kalenderwoche nach US-Norm, also falsch (lt. Kalenderwoche ist der 30.12.2013 in KW53, richtig ist KW01/2014).
3. wenn du U/K per Formel ermittelst, wird die überschrieben wenn du was einträgst. Du muss also immer deine Planung restaurieren.
Gruß
Rudi

AW: Schichteinteilung
01.10.2013 11:07:07
Marc
Moin!
Hab folgendes geändert:
Die Herleitung des Wochentages war doppelt: 1x über =Wochentag(), 1x über Zellformat ("TTTT").
Ich hab einfach einen Sverweis auf das Datum gesetzt und den MA über Vergleich ermittelt.
Der erste Tag der Woche ist der erste Tag der jeweiligen Kalenderwoche, die du in der Urlaubsliste eingetragen hast.
https://www.herber.de/bbs/user/87489.xlsx
Gruß, MCO

Anzeige
AW: Schichteinteilung
01.10.2013 11:53:39
Michael
Hallo Marc,
vielen Dank, die Funktion ist für mich ziemlich kompliziert, die Logik dahinter muss ich erst noch verstehen, jedenfalls funktioniert es!!
Ich melde mich wieder, wenn ich darüber noch etwas "gehirnt" habe, bestimmt habe ich dann noch Fragen.
Jedenfalls nochmal vielen Dank.
Gruß
Michael

AW: Schichteinteilung
01.10.2013 14:11:14
Michael
Hallo Marc,
also die Funktion überfordert mich doch etwas.
=WENN(SVERWEIS(D$8;Urlaub!$D$5:$HB$31;VERGLEICH($C10;Urlaub!$D$3:$I$3);0)0;SVERWEIS(D$8;Urlaub!$D$5:$HB$31;VERGLEICH($C10;Urlaub!$D$3:$I$3);0);"")
Der Sverweis an sich ist mir einigermaßen klar, allerdings nicht warum der Bereich bis HB31 definiert ist. Und wie funktioniert der Vergleich an sich? Die Sache fasziniert mich, leider verstehe ich nicht alles.
Ich muss die Funktion ja noch auf meine eigentliche Tabelle ummünzen, deshalb würde ich die Sache gerne besser kapieren.
Wenn es nicht zuviel Aufwand ist, hätte ich gerne noch etwas Nachhilfe von Dir, die ganze Sache ist doch etwas zu hoch für mich.
Gruß
Michael

Anzeige
Nachhilfe
02.10.2013 08:14:51
Marc
Guten Morgen, Michael!
Eigentlich ist die Formel ja nur halb so lang. Wie du siehst, wiederholt sich der Teil in der WENN-Formel. Beim ersten Teil wird geprüft, ob das Ergebnis ungleich 0 ist, beim zweiten Teil wird dieses Ergebnis ausgegeben.
Der "Sonntag" in D8 ist nicht nur ein ausgelesener Wochentag sondern ein konkretes Datum, nämlich der erste Tag in der KW aus C4
Dieses Datum nehme ich wieder in den Sverweis um im Sheet "Urlaub" Spalte D die richtige Zeile zu suchen. Für den Sverweis muß aber der komplette Bereich, der evtl auszulesen wäre angegeben werden, also alle Spalten, in denen evtl ein auszulesender Wert steht. HB ist die 230te Spalte, also eigentlich viel zu viel für 150 MA. Korrekt wäre EY, also Spalte (150+5), da die MA erst in "E" beginnen.
Ein weiterer Parameter im Sverweis ist die Spaltenversatz. Da dieser abhängig von der Bezeichnung in Spalte "C" ist, vergleiche ich diesen einfach mit dem Inhalt des Bereiches D3:I3. I3 ist hier natürlich nur richtig, weil nicht mehr Daten in der Tabelle stehen. Eigentlich muß hier "EY3" stehen.
Zusätzlich muß noch der Vergleichsparameter 0 eingefügt werden (genaue Übereinstimmung)
Die korrekte Formel für D10 lautet also:
=WENN(SVERWEIS(D$8;Urlaub!$D$5:$EY$31;VERGLEICH($C10;Urlaub!$D$3:$EY$3;0);0)0;SVERWEIS(D$8; Urlaub!$D$5:$EY$31;VERGLEICH($C10;Urlaub!$D$3:$EY$3;0);0);"") 

Gruß, MCO

Anzeige
AW: Nachhilfe
02.10.2013 10:31:45
Michael
Hallo Marc,
vielen Dank für Deine Geduld und Nachhilfe. Ich habe mir schon fast gedacht, dass der Bereich bis HB fiktiv ist.
Gestern habe ich schon mal etwas herumprobiert, bin aber in die Originaldatei, die etwas umfangreicher ist, habe ich Deine Lösung noch nicht einbauen können. Irgendetwas mache ich noch falsch. Ich hätte gleich die Originaldatei posten sollen, aber ich dachte, dass die gesendete Datei übersichtlicher ist.
Wie gesagt, ich probiere noch etwas rum, wenn ich gar nicht weiterkommen sollte, rufe ich nochmals um Hilfe.
Gruß
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige