irgendwie scheint Excel in VBA hier falsch zu rechnen:
Ich habe in einer Tabelle untereinander 5 absolute Zeiten, die ich addieren will im Format [hh]:mm.
Mit VBA lese ich per Schleife die einzelnen Zeiten aus und wandle sie zum addieren in Dezimalzahlen um. Dazu habe ich eine sinnvolle Funktion hier im Archiv gefunden. Nach Durchlauf der Schleife habe ich die Summe der Zeiten im Dezimalformat und wandle sie wieder in Stunden und Minuten um.
Seltsam ist, dass das Makro einwandfrei funktioniert, solange die Gesamtstundenzahl maximal 48:00 beträgt. Ab 49:00 Stunden wird trotzdem 48:00 ausgegeben. Ist die Summe tatsächlich 50:00, wird stattdessen 49:00 ausgegeben. Noch seltsamer: Ist die Summe 49:05, wird sie korrekt zurückgegeben, bei 50:05, etc. ebenfalls. Fehler also nur ab Stunde 49:00 und nur bei vollen Stunden!
Die unten gelisteten Funktionen stimmen. Seltsam ist, dass z.B. bei der Funktion "dec2Time", die die Dezimalzahl in eine Zeit (string) zurückrechnet, die summe (double) korrekt übergeben wird, aber bei Stunde 49 (also Dezimalzahl 49,0) die Funktion Stunde = Fix(summe) die Zahl 48 für Stunde zurückgibt...
als Beispiel die Tabelle: (Summe = 49:00 mit Tabellenfunktion, 48:00 mit VBA)
10:25
09:15
09:00
09:10
12:10
hier der Code:
Sub summeWo()
Dim i As Integer
Dim summe As Double, stdDez As Double
Dim dtime As Date, rueckgabe As String
summe = 0
For i = 1 To 5
If Cells(i, 1).Value "" Then
dtime = Cells(i, 1).Value
readZeit = dtime
time2Dec readZeit, stdDez
summe = summe + stdDez
End If
Next
sumZeit = summe
dec2Time sumZeit, rueckgabe
Cells(7, 1).Value = Format(rueckgabe, "hh:mm")
End Sub
'gelesene Zeit in Dezimalzahl umrechnen
Function time2Dec(ByVal readZeit As Date, ByRef stdDez As Double)
stdDez = readZeit * 24
End Function
'Dezimalzahl in Zeit umrechnen und zurückgeben
Function dec2Time(ByVal sumZeit As Double, ByRef rueckgabe As String)
Stunden = Fix(sumZeit)
Minuten = (sumZeit - Stunden) / 24
If Stunden
Vielleicht mag oder kann sich jemand dem Problem annehmen? Ich komm nicht weiter... scheint knifflig zu sein!
Vielen Dank im Voraus,
Heiko