Funktion zur Stundenerfassung

23/07/2008 - 17:41 von Petra | Report spam
Hallo,

ich habe ein Problem mit einer Funktion in Excel und hoffe dass mir hier jemand weiterhelfen kann, da ich mich mit Funktionen überhaupt nicht auskenne.

Die Datei dient zur Stundenerfassung und Berechnung von Zulagen.


Hier ist die Funktion (im VBA Modul1 gepeichert):


Function nachtzulage(zeit1 As Date, zeit2 As Date, zeit3 As Date, zeit4 As Date) As Double
l_zulage = 0
If zeit1 <> zeit4 Then
If zeit1 < TimeValue("04:00") Then
l_zulage = l_zulage + TimeValue("04:00") - zeit1
ElseIf zeit4 > TimeValue("20:00") Then
l_zulage = l_zulage + zeit4 - TimeValue("20:00")
ElseIf zeit4 < TimeValue("04:00") And zeit4 <= TimeValue("20:00") Then
l_zulage = l_zulage + zeit2 + 4 / 24
ElseIf zeit4 < TimeValue("04:00") And zeit2 > TimeValue("20:00") Then
l_zulage = l_zulage + zeit2 + (1 - zeit1)
ElseIf zeit4 < zeit1 Then
If zeit1 < TimeValue("20:00") Then
l_zulage = 4 / 24
Else
l_zulage = 1 - zeit1
End If
If zeit4 > TimeValue("04:00") Then
l_zulage = l_zulage + 4 / 24
Else
l_zulage = l_zulage + zeit4
End If
End If
End If
nachtzulage = l_zulage * 24
End Function


Diese hier ist jedem VBA Tabellenblatt:


Public Function zulage(z0 As Date, z1 As Date, z2 As Date) As Date

If z1 < TimeValue("04:00") Then 'z1 vor 4Uhr
zulage = z1
ElseIf z1 > TimeValue("20:00") Then 'z1 nach 20Uhr
zulage = z1
ElseIf z1 > z2 Or z2 > TimeValue("20:00") Then 'z2 über 24Uhr oder z2 nach 20Uhr
zulage = TimeValue("20:00")
Else
zulage = ""
End If

End Function


Dazu diese Formel:


=nachtzulage(E41;H41;G41;H41)


In Spalten E , F , G , H werden die "Abfahrtszeit", "Ankunftszeit", "Einsatzzeit bis" und "Ankunft" eingetragen.

Jedoch ergeben sich bei manchen Zeiten Fehler. Z.B. bei E = 3:00, F = 3:30, G = 20:00, H = 21:00

Theoretisch müsste das Ergebnis 2,0 Std. sein, ist aber nur 1,0 Std. Berechnet wird nur der Wert von E zu F, G zu H nicht.

Wàre toll wenn mir jemand weiterhelfen könnte.

LG Petra
 

Lesen sie die antworten

#1 Peter Schleif
23/07/2008 - 18:12 | Warnen spam
Petra schrieb am 23.07.2008 17:41 Uhr:

Theoretisch müsste das Ergebnis 2,0 Std. sein, ist aber nur 1,0 Std. Berechnet wird nur der Wert von E zu F, G zu H nicht.




Wenn Du gleich zu Beginn der Function "nachtzulage" ein STOP oder
einen Haltepunkt einfügst und dann mit <F8> im Einzelschritt
weitergehst, wirst Du sehen, dass nur jeweils *einer* deiner
If-ElseIf-Teile ausgeführt wird.

In deinem Beispiel nur der erste. Das macht dann eben auch nur 1,0
Std. Falls die anderen Bedingungen ebenfalls zur Summe beitragen
sollen, musst Du die If-Bedigungen voneinander unabhàngig notieren:

'/UNGETESTET/
'--
If zeit1 <> zeit4 Then
If zeit1 < TimeValue("04:00") Then
l_zulage = l_zulage + TimeValue("04:00") - zeit1
End If

If zeit4 > TimeValue("20:00") Then
l_zulage = l_zulage + zeit4 - TimeValue("20:00")
End If

' ...
' ...
End If

Ähnliche fragen