Microsoft Excel

Herbers Excel/VBA-Archiv

Mit VBA umrechnen Stunden Minuten Dezimal

Betrifft: Mit VBA umrechnen Stunden Minuten Dezimal von: chris b.
Geschrieben am: 12.08.2008 08:12:05


Hallo zusammen,
erst einmal allen einen schönen guten morgen.
Jetzt zu meinem problem.Ich habe mir ein VBA Programm erstellt das mir auswertungen macht.
Aber ich verzweifle mit der richtigen umrechnung Stunden minuten und der Dezimalangabe der zeit.
habe unten einen teil meines codes angefügt mit dem ich es bis jetzt versuche.
In meinen Zellen stehen die zeitangaben ca. so untereinander.
Dann legen ich mit einem anderen Code eine Sollzeit fest. Diese steht in einer anderen Zelle in diesem Format: 01:10:00 in der Zelle sieht es aber so aus-> 1:10:00
diese Sollzeit bedeutet 1 Stunde und 10 Minuten.
Jetzt soll aus den Datums unten gezählt werden wie viele die Sollzeit überschritten haben.
Aber irgend´wie errechnet er mir immer das falsche ergebniss. aufgefallen ist es mir bei diesem Wert
0 Tage 01:05h dann steht in meinem Array 1,8 aber das ist ja nicht ok weil es müsste ja eigentlich 1,08 sein glaube ich. Weil 1,8 ist ja mehr als die Sollzeit umgerechnet 1,166666 aber 1 Stunde 5 Minuten ist ja weniger als die Sollzeit von 1 Stunde und 10 Minuten :(

Ich weiß etas kompliziert zu verstehen.Kann es aber leider nicht besser erklären.
und leider muss ich es so zum laufen bekommen weil mein code doch recht komplex ist.
Würde mich freuen wenn mir jemand helfen könnte dabei.
Vielen Dank an alle helfer

gruß Chris

So stehen die zeiten untereinander in der Spalten:

0 Tage 00:01h
0 Tage 00:00h
0 Tage 01:25h
0 Tage 01:00h
0 Tage 01:05h
0 Tage 00:10h
0 Tage 00:05h
0 Tage 00:05h
0 Tage 00:32h
0 Tage 01:10h

Code um diese Werte oben umzurechnen und einzutragen in das array.

~f~
For a = 5 To neu.Worksheets(2).Cells(Rows.Count, yy).End(xlUp).Row
If neu.Worksheets(2).Cells(a, yy) = "" Then GoTo leer

bis = InStr(neu.Worksheets(2).Cells(a, yy), "Tage")
' On Error Resume Next
tage_in_stunden_akt = CDbl(Left(neu.Worksheets(2).Cells(a, yy), bis - 1)) * 24
stunden_akt = CDbl(Mid(neu.Worksheets(2).Cells(a, yy), bis + 5, 2))

stunden_akt = stunden_akt + tage_in_stunden_akt

minuten_akt = 100 / 60 * CDbl(Mid(neu.Worksheets(2).Cells(a, yy), bis + 8, 2))
'minuten_akt = Mid(neu.Worksheets(2).Cells(a, yy), bis + 8, 2)
gesamt_stunden(a - 5) = stunden_akt & "," & CInt((minuten_akt))
leer:
Next


'Sollzeitüberschreitungen zählen
akt_sollzeit = CDbl(neu.Worksheets(2).Cells(2, yy)) * 24
For ss = 0 To UBound(gesamt_stunden)
If akt_sollzeit = 0 Then
aktsollzeitzaehler = 0
Exit For
Else
End If

P.s sorry meine Rechtschreibfehler wenn vorhanden.

  

Betrifft: AW: Mit VBA umrechnen Stunden Minuten Dezimal von: chris b.
Geschrieben am: 12.08.2008 09:07:08

habe es selbst hinbekomnmen.
Vielen dank

'Umwandeln Werte in Stunden
For yy = 1 To neu.Worksheets(2).Cells(4, Columns.Count).End(xlToLeft).Column
akt_sollzeit = 0
ReDim gesamt_stunden(neu.Worksheets(2).Cells(Rows.Count, yy).End(xlUp).Row - 5)
ReDim gesamt_minuten(neu.Worksheets(2).Cells(Rows.Count, yy).End(xlUp).Row - 5)

For a = 5 To neu.Worksheets(2).Cells(Rows.Count, yy).End(xlUp).Row
If neu.Worksheets(2).Cells(a, yy) = "" Then GoTo leer

bis = InStr(neu.Worksheets(2).Cells(a, yy), "Tage")
' On Error Resume Next
tage_in_stunden_akt = CDbl(Left(neu.Worksheets(2).Cells(a, yy), bis - 1)) * 24
stunden_akt = CDbl(Mid(neu.Worksheets(2).Cells(a, yy), bis + 5, 2))

stunden_akt = stunden_akt + tage_in_stunden_akt

minuten_akt = CDbl(Mid(neu.Worksheets(2).Cells(a, yy), bis + 8, 2)) / 60

gesamt_stunden(a - 5) = CDbl((minuten_akt)) + stunden_akt


  

Betrifft: AW: Mit VBA umrechnen Stunden Minuten Dezimal von: Yal
Geschrieben am: 12.08.2008 10:29:03

Hallo Chris,

muss es unbedingt mit VBA gelöst werden?

Ich würde, Einfachheitswegen, mit Formeln zuerst probieren.

Du hast also in Spalte A verschiedene Zeiten, in Splate B möchtest Du auflisten, in wie weit diese Zeiten über 1:10 sind.
Das Problem liegt daran, dass es sich hier um eine Substraktion zwischen Zeiten handelt, und dass Excel nicht zu recht kommt, wenn eine Zeitmenge negativ wird, nämlich wenn die Zeit in Spalte unter 1:10 steht.

Daher muss Du zuerst prüfen, ob Du die Differenz bilden darf.

Füge in Spalte B folgende Formel:
=WENN(A8>ZEIT(1;10;0);A8-ZEIT(1;10;0);"SollZeit nicht erreicht")

also wenn die Zeit in Spalte A unter 1:10 ist, keine Delta bilden, ansonsten Delta ausrechnen.

Viel Erfolg
Yal


 

Beiträge aus den Excel-Beispielen zum Thema "Mit VBA umrechnen Stunden Minuten Dezimal"