Hallo Peter,
Dabei geht es u.a. darum, in Abhängigkeit einer Priorität
einen Wert für „Ticket zu erledigen bis“ zu errechnen.
Hat jemand eine Idee, wie das berechnet werden kann, denn eine
einfach Addition hilft da nicht.
die Aufgabenstellung ist nicht trivial. Da ich so etwas Ähnliches demnächst selbst brauche, habe ich einfach mal etwas Zeit investiert. Das Problem löse ich mit einer benutzerdefinierten VBA-Funktion, die, nach korrekter Integration in die betreffende Excel-Mappe, dort wie eine ganz normale Formel benutzt werden kann. Andere Lösungen halte ich für unflexibel und „unhandlich“.
Um die VBA-Funktion nutzen zu können, muss man sie erst einbinden. Ich habe für Excel 2010 einfach mal ein Add-In erstellt, welches du hier downloaden kannst: http://www.file-upload.net/download-4471611/udf_Dead…
Wie man ein Excel-Add-In installiert wird hier beschrieben: http://www.online-excel.de/excel/singsel.php?f=139
Alternativ kannst du die Funktion natürlich auch per Copy&:stuck_out_tongue_winking_eye:aste in möglicherweise bereits vorhandene Module einfügen.
Die „Formel“ habe ich mal DEADLINE genannt. Damit es funktioniert müssen als Argumente zunächst Datum/Zeit des Auftragseingangs und anschließend die Normzeit in Stunden angegeben werden.
Beispiele:
=DEADLINE( 23.06.2012 10:18 ; 16 ) ergibt den Wert 41086,5625 (als Datum/Zeit formatiert entspricht das 26.06.2012 13:30)
=DEADLINE( 23.06.2012 10:18 ; 5 ) ergibt den Wert 41085,52083 (als Datum/Zeit formatiert entspricht das 25.06.2012 12:30)
=DEADLINE( 25.06.2012 10:20 ; 5 ) ergibt den Wert 41085,63906 (als Datum/Zeit formatiert entspricht das 25.06.2012 15:20)
=DEADLINE( 25.06.2012 10:20 ; 55 ) ergibt den Wert 41092,63906 (als Datum/Zeit formatiert entspricht das 02.07.2012 15:20)
Meine Annahmen:
- Arbeitszeit von 07:30 bis 17:30
- Samstag und Sonntag sind keine Arbeitstage (und Feiertage gibt es nicht)
- Es wird berücksichtigt, dass Tickets auch außerhalb der Geschäftszeiten „eintrudeln“, aber nur während der Arbeitszeit bearbeitet werden können
- Die „Normzeit“ ist variabel
Ob meine Annahmen realistisch sind, sei mal dahingestellt. Du hast dir über die Bedingungen wahrscheinlich nur wenige Gedanken gemacht, und ich habe das in erster Linie so gemacht, wie ich mir das selbst gut vorstellen kann.
Auf eine detaillierte Beschreibung, was ich da überhaupt mache, möchte ich verzichten. Wer programmieren kann, wird das schon verstehen und an seine eigenen Bedürfnisse anpassen können. Alle anderen brauchen das nicht zu verstehen.
Achtung:
Die Funktion ist nur oberflächlich getestet. Ich kann nicht garantieren, dass sie unter allen erdenklichen Situationen problemlos funktioniert.
MfG
Stephan
PS: Hier der VBA-Code
Public Function DEADLINE(Beginn As Date, Dauer As Double) As Date
'######################################################################################################
’
'Beschreibung:
’
'Diese Funktion berechnet den maximalen Zeitpunkt der Auftragserledigung in Abhaengingkeit von
'Auftragseingang und Normzeit unter der Berücksichtigung weiterer Bedingungen.
’
'Argumente:
’
'Beginn: Datum mit Uhrzeit (Auftragseingang)
'Dauer: Geschätzte Dauer in Stunden (Normzeit)
’
'Annahmen:
’ 1. Samstag und Sonntag sind keine Arbeitstage
’ 2. Es steht pro Tag nur eine gewisse Anzahl an Stunden zur Verfügung
’ 3. Liegt der ‚Auftragseingang‘ außerhalb der ‚Geschaeftszeiten‘ wird intern der nächstmöglich Starttermin
’ berechnet und angewendet
’
’ Version: 1.0 Geändert von: Stephan Geändert am: 23.06.2012 10:15
’
'######################################################################################################
Dim Anfang As Double
Dim Ende As Double
Dim Arbeitszeit As Double
Dim Start As Double
Dim Restzeit As Double
Anfang = 7.5 / 24 '07:30 Arbeitsbeginn
Ende = 17.5 / 24 '17:30 Arbeitsende
Arbeitszeit = Round(Ende - Anfang, 10)
'frühesten Startzeitpunkt ermitteln -------------------------------------------------------------
If Beginn >= (Ende + Int(Beginn)) Or Weekday(Beginn, vbMonday) > 5 Then
Start = Int(Beginn) + 1 + Anfang
Do While Weekday(Start, vbMonday) > 5
Start = Start + 1
Loop
ElseIf Beginn 5 Then
Start = Int(Beginn) + Anfang
Do While Weekday(Start, vbMonday) > 5
Start = Start + 1
Loop
Else
Start = Beginn
End If
'------------------------------------------------------------------------------------------------
'Deadline ermitteln -----------------------------------------------------------------------------
If (Dauer / 24) 1
Restzeit = Restzeit - Arbeitszeit
Do
Start = Start + 1
Loop While Weekday(Start, vbMonday) > 5
Loop
DEADLINE = Start + Restzeit
Exit Function
End If
'------------------------------------------------------------------------------------------------
End Function