In Zeile 8 z. B. hast du 8,3 eingegeben. Daraus werden 8h und
3min. Soweit ist alles in Ordnung.
In Zeile 9 hast Du 8,30 eingegeben. Daraus werden ebenfalls 8h
und 3 min. Müsste hier nicht 8h und 30 min eingetragen
werden.
Rein mathematisch ist 8,3 und 8,30 natürlich das gleiche. Aber
die Zahl hinter dem Komma sollte doch die Anzahl der Minuten
sein, oder habe ich einen Denkfehler?
Hallo shooty,
nein, hast du nicht. 8,30 sollte 08:30 ergeben, bei 8,3 möchte man manchmal 08:03, manchmal 08:30 als Ergebnis.
Ich habe meinen Code abgeändert. Schlechte Nachricht, er funktioniert nur wenn die Eingabespalte als Text formatiert ist. Gute Nachricht, mit den angezeigten Werten kann man weiterrechnen also ob es als [hh]:mm formatiert gewesen wäre 
Der Code ist nachfolgend, hier erstmal die Testtabelle:
„A“ = aus 8,4 wird 08:40
„B“ = aus 8,4 wird 08:04
Dazu im Code die Variable "Variante dementsprechend setzen.
Man sieht in B was eingegeben wurde und in C und D was daraus gemacht wurde, jenachdem ob „A“ oder „B“ gewählt wurde. In E und F sieht man daß man mit C und D rechnen kann.
Tabelle:
F:\[ZeitEingebenTextbox.xls]!Tabelle3
│ A │ B │ C │ D │ E │ F │
───┼───────┼─────────┼───────┼───────┼───────┼───────┤
1 │ 24:00 │ Eingabe │ "A" │ "B" │ A1-Cx │ A1-Dx │
2 │ │ 7 │ 07:00 │ 07:00 │ 17:00 │ 17:00 │
3 │ │ 7, │ 07:00 │ 07:00 │ 17:00 │ 17:00 │
4 │ │ 7,2 │ 07:20 │ 07:02 │ 16:40 │ 16:58 │
5 │ │ 7,12 │ 07:12 │ 07:12 │ 16:48 │ 16:48 │
6 │ │ 7: │ 07:00 │ 07:00 │ 17:00 │ 17:00 │
7 │ │ 7:2 │ 07:20 │ 07:02 │ 16:40 │ 16:58 │
8 │ │ 7:12 │ 07:12 │ 07:12 │ 16:48 │ 16:48 │
9 │ │ 8,5 │ 08:50 │ 08:05 │ 15:10 │ 15:55 │
10 │ │ ,1 │ 00:10 │ 00:01 │ 23:50 │ 23:59 │
11 │ │ ,10 │ 00:10 │ 00:10 │ 23:50 │ 23:50 │
12 │ │ ,5 │ 00:50 │ 00:05 │ 23:10 │ 23:55 │
13 │ │ 23,59 │ 23:59 │ 23:59 │ 00:01 │ 00:01 │
14 │ │ 0 │ 00:00 │ 00:00 │ 24:00 │ 24:00 │
15 │ │ 0,59 │ 00:59 │ 00:59 │ 23:01 │ 23:01 │
16 │ │ ,59 │ 00:59 │ 00:59 │ 23:01 │ 23:01 │
17 │ │ ,67 │ 00:67 │ 00:67 │ 22:53 │ 22:53 │
───┴───────┴─────────┴───────┴───────┴───────┴───────┘
Benutzte Formeln:
E2 : =$A$1-C2
usw.
F2 : =$A$1-D2
usw.
Tabellendarstellung erreicht mit dem Code in FAQ:2363
Gruß
Reinhard
Option Explicit
'
Private Sub Worksheet\_Change(ByVal Target As Excel.Range)
' Programm erleichert die Eingabe von Uhrzeiten. Als Trennzeichen zwischen Stunde(n) und Minute(n)
' ist zusätzlich zum Doppelpunkt auch das Komma erlaubt was speziell die Eingabe über
' den numerischen Tastenblock rechts auf der Tastatur beschleunigt da man die Shifttaste
' nicht mehr braucht.
' Bei Eingabe von Zeiten mit keinem Wert für die Minuten, reicht es den Stundenwert einzugeben, den
' Doppelpunkt braucht man dann nicht mehr dahinterzusetzen.
' Das Programm geht davon aus daß die Spalte für die Zeiteneingabe das Format "Text" hat.
' Nach Programmdurchlauf erscheint die Uhrzeit im Format "hh:mm"
' Der Code gehört in das Klassen/Dokument-Modul des jeweiligen Blattes.
' (Alt+F11, Doppelklick auf den Blattnamen links)
' Das Programm reagiert selbsständig auf Eigaben in den frei wählbaren zu überwachenden
' Spalten. Eingaben in andere Spalten bleiben vom Programm unberührt.
' Entwickelt auf XL97, 2008 by Reinhard
'
'Const Variante As String = "A" ' "A" = aus 8,4 wird 08:40
Const Variante As String = "B" ' "B" = aus 8,4 wird 08:04
Dim T As String
If Target.Column 3 And Target.Column 4 Then Exit Sub
If Target.Cells.Count 1 Then Exit Sub
T = Target.Value
If Fehler(T) Then
Target.Select
Exit Sub
End If
If InStr(T, ",") 0 Then T = Application.WorksheetFunction.Substitute(T, ",", ":")
If InStr(T, ":") = 0 Then T = T & ":"
T = Mid("00", InStr(T, ":")) & T
If Variante = "A" Then T = Left(T & "00", 5)
If Variante = "B" Then T = Left(T, 3) & Right("00" & Mid(T, InStr(T, ":") + 1), 2)
Application.EnableEvents = False
Target.Value = T
Application.EnableEvents = True
End Sub
'
Function Fehler(ByVal T As String) As Boolean
Dim N As Integer, D As Integer, K As Integer, T1 As String, T2 As String
For N = 1 To Len(T)
Select Case Asc(Mid(T, N, 1))
Case 48 To 57
'okay
Case 44, 58
D = D + 1 - (N \> 3)
Case Else
Fehler = True
End Select
Next N
If D \> 1 Then Fehler = True
If Fehler = False Then
T1 = T
If InStr(T, ":") Then
T1 = Left(T, InStr(T, ":") - 1)
T2 = Mid(T, InStr(T, ":") + 1)
End If
If InStr(T, ",") Then
T1 = Left(T, InStr(T, ",") - 1)
T2 = Mid(T, InStr(T, ",") + 1)
End If
If Len(T1) \> 2 Or Len(T2) \> 2 Then Fehler = True
End If
If Fehler = True Then MsgBox "Fehlerhafte Eingabe"
End Function