title image


Smiley Re: Rechnen mit negativer Uhrzeit
Hallo!



Du kannst zwar mit negativen Zeitwerten rechnen, sie aber nicht korrekt anzeigen lassen. Es gibt diverse Möglichkeiten, dieses Manko zu umgehen. Im Archiv wirst Du dazu einiges finden.



Hier mal ein Vorschlag, bei dem Du das Ergebnis einer solchen Berechnung einfach in Text umwandelst, der richtig angezeigt wird, auch wenn er einen negativen Zeitwert darstellt. Dazu verwendest Du die Funktion ZText.



Und zur Ergänzung dann noch die Funktion ZWert, die Dir einen derartigen Text wieder in eine Zahl zurückverwandelt, mit der Du rechnen kannst.



Hier die Funktionen:

.....................................................................

Function ZText(Zeit, Optional NullwertAnzeigen As Boolean)



Application.Volatile

ZText = ""

On Error GoTo Ende



'Wenn NullwerteAnzeigen nicht übergeben wurde,

If IsMissing(NullwertAnzeigen) Or IsEmpty(NullwertAnzeigen) Then NullwertAnzeigen = True

If VarType(Zeit) = vbString Then

Zeit = ZWert(Zeit)

End If



'Wenn der Zeitwert = 0 ist und nicht angezeigt werden soll,

If Zeit = 0 And NullwertAnzeigen = False Then

'wird ein leerstring ausgegeben

ZText = ""

Else

'andernfalls wird ggf. das Vorzeichen ermittelt

If Zeit < 0 Then vorz = "-"

'und der Zeitwert auf 24-Stundenbasis gebracht

Zeit = Abs(Zeit * 24)

'Die Stunden ergeben sich aus dem Vorkommawert

'Dabei muß zum Zeitwert noch 0.1 addiert werden, weil

'sonst die Stundenzahl um 1 zu klein ausgegeben wird

Stunden = Format(Fix(Zeit + 0.01), "0")

'und die Minuten aus dem Nachkommawert

Minuten = Format((Zeit - Stunden) * 60, "00")

'Vor das zusammengesetzte Ergebnis wird noch das Vorzeichen gesetzt

ZText = vorz & Stunden & ":" & Minuten

End If



Ende:

End Function



......................................................................

Function ZWert(Zeit)



Application.Volatile

On Error GoTo Ende

'Der Fall, daß im Bezug nichts steht, wird aufgefangen

If Zeit = "" Then Zeit = "0:00"

'sicherheitshalber wird auf jeden Fall in String umgewandelt

Zeit = CStr(Zeit)

'Der String wird in Stunden und Minuten zerlegt

Stdtext = Left(Zeit, InStr(Zeit, ":") - 1)

If Left(Stdtext, 1) = "-" Then

vorz = -1

Else

vorz = 1

End If

Mintext = Mid(Zeit, InStr(Zeit, ":") + 1)

Stunden = Val(Stdtext)

Minuten = Val(Mintext)

'Es wird geprüft, ob zulässige Werte vorliegen

Stdnum = IsNumeric(Stdtext)

MinLen = Len(Mintext) = 2

Minnum = IsNumeric(Mintext)

Minmin = Minuten = 0

If Stdnum And Minnum And Minmin And MinLen Then

'Wenn ja wird der entsprechende Zeitwert ermittelt

ZWert = vorz * (Abs(Stunden) / 24 + (Minuten) / (24 * 60))

'MsgBox ZWert * 24 * 60

Else

'Wenn nein, wird der Fehlerwert #WERT ausgegeben

ZWert = CVErr(xlErrValue)

End If



Ende:

If Err.Number > 0 Then

ZWert = CVErr(xlErrValue)

End If



End Function

.............................................................................



Viel Erfolg

Manes
Ob ich Spotlight gut finde? Also wenn ich ehrlich sein soll, müsste ich lügen!

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: