ich arbeite derzeit in einem kleineren Unternehmen und möchte dort mithilfe einer Excel Tabelle die Steuerung der Produktion verbessern. Mein Ziel ist es mithilfe der erstellten Excel- Liste genauere Fertigstellungszeitpunkte (Stundengenau) anzugeben. Gegeben: - Jahreskalender mit täglichen Arbeitszeiten / Feiertagen - Dauer des Fertigungsauftrages in h - Täglich vorhandene Arbeitszeit Gesucht: - Fertigstellungszeitpunkt unter Berücksichtigung der täglichen Arbeitszeit - Bei einer Zeitlichen Änderung im Kalender oder der Auftragsdauer sollte dies fortlaufend mit eingerechnet werden Derzeit kann ich leider von 24h ausgehen und Ich weiß leider nicht wie ich einen genaueren Termin berechnen kann. Das heißt er verrechnet mir pro Tag jeweils 1,5h Zuviel oder mehr, wenn ich eine Woche mit 2 oder 1 Schicht rechnen möchte. Somit suche ich eigentlich nach einer Formel bzw. Programmierung die es mir ermöglicht, das mein Plan neue Termine sofort berechnen kann. Ähnlich wie MS- Projekt das ermöglicht. Vielleicht weis jemand von euch eine Lösung. Vielen Dank und Gruß Revo
Egal ob als Bild oder Datei, Deine Daten passen aber eher zu einem 3Schichtsystem - 22,5 h am vollen Tag - als zu einem 2Schichtsystem oder arbeitet Ihr 11,25h am Tag? Auch die 7,5 h a Sonntag passen nicht, wenn es dabei um die Nachtschicht eines 3SchichtSystems geht. Da fallen am Sonntag doch in der Regel nur 2 h an und dann wird bis Montag früh 6 Uhr gearbeitet - ergibt abzüglich 30 Minuten Pause dann die 7,5 h. Man müsste auch genau wissen, wann Ihr die 2 Schichten fahrt, z.B. ab 6:00 Uhr oder 5:30, und analog zu Deinem Bild wie die verfügbare Zeit ist und ob z.B. bei der Uhrzeitermittlung Pausen zu berücksichtigen sind …
Wir hatten schon mal ein ähnliches Thema - schaue mal in diesen Thread, ob das für Deine Zwecke passt oder passend gemacht werden kann
Hallo, vielen Dank. Dieser Link hat mir sehr weitergeholfen (siehe Zitat) allerdings sind meine Kenntnisse in der VBA sehr schlecht. Deshalb tu ich mich sehr schwer dies auf mich anzupassen.
Die Feiertagsregelung benötige ich nicht (kann ich ja dann auch im Arbeitskalender eintragen). Allerdings sollen alle Zeiten flexible berechnet werden, je nachdem wie viel Zeit am entsprechenden Tag zur Verfügung steht. Außerdem soll die Berechnung bei einer Änderung der Reihenfolge oder Änderung des Startdatums, durch Knopfdruck eine Neuberechnung stattfinden. Es ist möglich das Aufträge auch länger als 24 benötigen.
Wäre echt klasse wenn ihr mir hier weiterhelfen könnt.
Vielen Dank schon mal :)
Zitat:Sub Zeitberechnung()
lr = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lr Cells(i, "C") = Cells(i, "A") + Cells(i, "B") 'Feiertag 'Beginn: Tadd = 0 wtag = Weekday(Int(Cells(i, "C")), 2) Select Case wtag Case 1 If (Cells(i, "C") - Int(Cells(i, "C"))) < 0.25 Then Tadd = 0.25 Case 6 If (Cells(i, "C") - (Int(Cells(i, "C")))) > 0.25 Then Tadd = 0.75 + 1 + 0.25 'von Sa 6:00 auf Mo 6:00 verschieben End If Case 7 Tadd = 1 End Select
Cells(i, "C") = Cells(i, "C") + Tadd Next i End Sub
hier mal ein Anfang. Der Code ist allerdings erst mal fest auf Dein Anfangsdatum und die beiden Tabellengrößen programmiert. Ich muss jetzt erst mal in die Falle, morgen früh geht's gegen 5 wieder hoch … Wenn das bis dahin keiner ausbaut kommt von mir morgen Abend der Rest
Code:
Sub test() Dim iCnt%, kCnt%, iAuf#, iHab#
kCnt = 7 For iCnt = 3 To 24 iAuf = iAuf + Cells(iCnt, 2) Do While iHab < iAuf iHab = iHab + Cells(kCnt, 11) - Cells(kCnt, 10) + (Cells(kCnt, 10) > 0) * (Cells(kCnt, 11) = 0) kCnt = kCnt + 1 If kCnt > 35 Then Exit Do Loop Cells(iCnt, 3) = Cells(kCnt - 1, 8) + Cells(kCnt - 1, 11) - (iHab - iAuf) Cells(iCnt, 4) = iAuf 'Summe Auftragszeiten zur Kontrolle in Spalte D Next End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • Revo91
OptionExplicitSub test()
'Variablendeklarationen Integer, Double Dim iCnt%, kCnt%, iAuf#, iHab#
'in Spalte H Zeile mit Startdatum aus C2 ermitteln
kCnt = Columns("H:H").Find(What:=Cells(2, 3).Value, After:=Cells(2, 8), LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
'Schleife ueber alle Zeilen mit Auftraegen ab Zeile 3 'Beachte: Unter den Auftraegen darf in Spalte A nix stehen For iCnt = 3To Cells(Rows.Count, 1).End(xlUp).Row
'Auftragszeit kumulativ ermitteln
iAuf = iAuf + Cells(iCnt, 2)
'Schleife solange die verbrauchte Zeit kleiner als die Auftragszeit ist DoWhile iHab < iAuf
'verbrauchte Zeit kumuliert ermitteln + Korrektur 1 bei Tagesanfang > 0:00 und Tagesende = 0:00
iHab = iHab + Cells(kCnt, 11) - Cells(kCnt, 10) + (Cells(kCnt, 10) > 0) * (Cells(kCnt, 11) = 0)
'Zeilenzaehler hochsetzen
kCnt = kCnt + 1'Schleife verlassen wenn Ende der Zeittabelle erreicht ist 'anhand Spalte H - unter den Eintragungen darf nix mehr stehen! If kCnt > Cells(Rows.Count, 8).End(xlUp).Row ThenExitDo'Ende Schleife solange die verbrauchte Zeit kleiner als die Auftragszeit ist Loop'Ende ermitteln aus Datum der vorherigen Zelle und restlicher Auftragszeit fuer den Tag '(ergibt sich aus Differenz zwischen Auftragszeit und verbrauchter Zeit iHab-iAuf)
Cells(iCnt, 3) = Cells(kCnt - 1, 8) + Cells(kCnt - 1, 11) - (iHab - iAuf) + (Cells(kCnt - 1, 10) > 0) * (Cells(kCnt - 1, 11) = 0)
'Auftragszeit kumuliert in Spalte D ausgeben - Codezeile kann geloescht werden
Cells(iCnt, 4) = iAuf
'Ende Schleife ueber alle Zeilen mit Auftraegen ab Zeile 3 NextEndSub