Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1224to1228
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Rechnen mit Zehntelsekunden

VBA: Rechnen mit Zehntelsekunden
Martin
Liebe Excelfreunde,
ich lese aus einer Textdatei per Makro Zeiten mit Zehntelsekunden ("hh:mm:ss,0") aus. Eigentlich wollte ich mir der Variable Date arbeiten, aber damit klappt die Zuweisung nicht:
Sub Beispiel()
Dim ReadTime As Date
ReadTime = CDate("11:15:20,7")
End Sub
Es erscheint (aufgrund der Zehntelsekunden) die Fehlermeldung "Laufzeitfehler '13': Typen unverträglich"
Mit welchem Variablentypen muss ich arbeiten, wenn ich mit VBA verschiedene Zeiten mit Zehntelsekunden miteinander verrechnen (Addieren/Subtrahieren) möchte?
Viele Grüße
Martin

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA: Rechnen mit Zehntelsekunden
17.08.2011 23:26:32
fcs
Hallo Martin,
das Zeitformat unter VBA kennt keine Sekundenbruchteile.
Die entsprechenden Zahlen müssen als Double deklariert werden und der Zeittext muss speziell ausgewertet und umgerechnet werden.
Nachfolgend ein Beispiel mit einer entsprechenden benutzerdefinierten Funktion.
Gruß
Franz
Sub Beispiel()
Dim ReadTime1 As Double, ReadTime2 As Double, sTime1 As String, sTime2 As String
sTime1 = "11:15:20,7"
ReadTime1 = Zeit_Dezimal(sTime1)
sTime2 = "11:15:20"
ReadTime2 = Zeit_Dezimal(sTime2)
MsgBox sTime1 & "  |  " & ReadTime1 & vbLf _
& sTime2 & "  |  " & ReadTime2 & vbLf _
& "Zeitdifferenz: " & ReadTime1 - ReadTime2 & " Tage" & vbLf _
& "Zeitdifferenz: " & Format((ReadTime1 - ReadTime2) * 24 * 3600, "#,##0.00") _
& " Sekunden"
End Sub
Function Zeit_Dezimal(TimeText As String) As Double
'Rechnet einen Zeittext, ggf. mit Bruchteilen von Sekunden in Tage als Dezimalzahl um
If InStr(1, TimeText, ",") > 0 Then
If IsDate(Left(TimeText, InStr(1, TimeText, ",") - 1)) Then
Zeit_Dezimal = CDbl(TimeValue(Left(TimeText, 8))) _
+ CDbl(Mid(TimeText, InStr(1, TimeText, ","))) / 24 / 3600
Else
Zeit_Dezimal = 0
End If
Else
If IsDate(TimeText) Then
Zeit_Dezimal = CDbl(TimeValue(TimeText))
Else
Zeit_Dezimal = 0
End If
End If
End Function

Anzeige
Vielen Dank! Geht es auch im Format "0:00:00,0" ?
17.08.2011 23:41:34
Martin
Hallo Franz,
ich hätte nicht gedacht, dass das Excel selbst nicht kann und bin dir für deine Makros wirklich sehr dankbar. Würdest du das Makro bitte noch so abändern, dass die Zeitdifferenz im Format "0:00:00,0" ausgegeben wird? Dann wäre mein Problem gelöst! ;-)
Viele Grüße
Martin
Geht es auch im Format "0:00:00,0" ?
18.08.2011 01:52:07
fcs
Hallo Martin,
als Format in der Tabelle kann Excel Zeiten mit Sekundenbruchteilen darstellen.
Allerdings wird der Eingabewert nur im Hintergrund verwaltet. Im Editierfeld geht beim Editieren jedoch die Nachkommastelle verloren.
Nachfolgend eine Funktion, die einen Text im gewünschten Format unter VBA generiert.
Gruß
Franz
Sub Beispiel()
Dim ReadTime1 As Double, ReadTime2 As Double, sTime1 As String, sTime2 As String
sTime1 = "11:59:59,9"
ReadTime1 = Zeit_Dezimal(sTime1)
sTime2 = "10:00:00,0"
ReadTime2 = Zeit_Dezimal(sTime2)
MsgBox sTime1 & "  |  " & ReadTime1 & vbLf _
& sTime2 & "  |  " & ReadTime2 & vbLf _
& "Zeitdifferenz: " & ReadTime1 - ReadTime2 & " Tage" & vbLf _
& "Zeitdifferenz: " & Zeit_DezimalSekunden(ReadTime1 - ReadTime2)
End Sub
Function Zeit_Dezimal(TimeText As String) As Double
'Rechnet einen Zeittext, ggf. mit Bruchteilen von Sekunden in Tage als Dezimalzahl um
If InStr(1, TimeText, ",") > 0 Then
If IsDate(Left(TimeText, InStr(1, TimeText, ",") - 1)) Then
Zeit_Dezimal = CDbl(TimeValue(Left(TimeText, 8))) _
+ CDbl(Mid(TimeText, InStr(1, TimeText, ","))) / 24 / 3600
Else
Zeit_Dezimal = 0
End If
Else
If IsDate(TimeText) Then
Zeit_Dezimal = CDbl(TimeValue(TimeText))
Else
Zeit_Dezimal = 0
End If
End If
End Function
Function Zeit_DezimalSekunden(ByVal Wert As Double, Optional bPlus As Boolean) As String
'Wert in Bruchteilen von Tagen im Format hh:mm:ss,0 anzeigen
Dim Stunden As Double, Minuten As Double, Sekunden As Double
Dim SekundenBruchteil As Double, WertAbs As Double
Dim Vorzeichen As String
If bPlus = True Then Vorzeichen = "+"
If Wert 

Anzeige
AW: Geht es auch im Format "0:00:00,0" ?
20.08.2011 15:18:35
Martin
Hallo Franz,
entschuldige meine späte Antwort, aber ich bin zur Zeit auswärts. Vielen lieben Dank für deine Bemühungen, du hast mir sehr weitergeholfen.
Viele Grüße
Martin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige