2016-11-20 1 views
0

Ich habe eine Spalte mit dem WertExcel VBA - Finden Sie heraus Unterschied in Stunden

09:00 - 21:00

Der Versuch, um herauszufinden, wie kann ich den Unterschied in Stunden erhalten, das heißt. für dieses Beispiel 12.

+0

gehen würden Sie für eine VBA suchen oder Lösung übertreffen? – CallumDA

+0

Wenn Sie nach einer VBA-Lösung suchen, scheint die 'DateDiff'-Funktion genau das zu sein, was Sie brauchen. Diese Funktion gibt die Differenz zwischen zwei Daten in der gewählten Einheit von Sekunden bis Jahren zurück. Sie sagen nicht, wie 9:00 und 21:00 Uhr gehalten werden. Wenn sie in Zellen gehalten werden, werden sie wahrscheinlich als Daten festgehalten. Excel hält Daten als Doppel. Der ganzzahlige Teil ist die Anzahl der Tage seit dem 1.1.1900, und der Bruchteil ist SecondsSinceMidnight/SecondsInDay. –

Antwort

2

Sie diese Funktion nutzen zu können

Function GetHourDifference(cell As Range) As Long 
    GetHourDifference = Hour(Split(cell.Value, "-")(1)) - Hour(Split(cell.Value, "-")(0)) 
End Function 

in Ihrem Haupt-Code ausgenutzt werden als

MsgBox GetHourDifference(Range("a1")) '<--| if cell "A1" has value "09:00 - 21:00" it returns: 12 
+0

@ user1049961 - Seien Sie sich bewusst, dass die Lösung nur den Stundenanteil der beiden Zeiten subtrahiert, d. H. Die Minuten vollständig ignoriert. So werden sowohl 09:00 - 21:59 als auch 09:59 - 21:00 als 12 Stunden gemeldet, obwohl der erste 12 Stunden und 59 Minuten und der zweite nur 11 Stunden und 1 Minute ist. – YowE3K

0

folgt, wenn Ihr 09.00 - 21.00 in Zelle B7, dann funktioniert dies:

=TIME(RIGHT(B7,5),RIGHT(B7,2),)-TIME(LEFT(B7,5),MID(B7,4,2),) 

sehr rohe Gewalt, wie es davon ausgeht, dass die ti Ich bin immer 00.00 und keine anderen Zeichen werden jemals enthalten sein.

+0

Ich habe es gerade noch einmal versucht, mit Zelle B7, die das angegebene Beispiel und meinen Ausdruck wie gezeigt enthält und es funktioniert - Ändern des Ergebnisses wie die Beispielzeiten bearbeitet werden. Wie können Sie antworten, dass "es annimmt, die Zeit ist immer 00.00" - haben Sie es tatsächlich getestet, wie ich zweimal getan habe ... –

0
Option Explicit 

Sub Macro1() 
Dim txtDate As String 
Dim i As Integer 
Dim varDateDif As Variant, split1 As Variant, split2 As Variant 

' Cell with times 
txtDate = Range("A2").Value 

' Split the cell using the delimiter - 
varDateDif = Split(txtDate, "-") 

For i = 0 To LBound(varDateDif) 
    split1 = varDateDif(i) ' First time 
    split2 = varDateDif(i + 1) ' Second time 
Next i 

' Difference in hours 
Range("B2").Value = Abs(CDate(split1) - CDate(split2)) 
' Difference in minutes 
Range("C2").Value = DateDiff("n", split1, split2) 

End Sub 
+0

fragt das OP speziell nach dem Unterschied in Stunden, also denke ich nicht, dass Minuten notwendig sind. Ich denke auch, dass dies eine bessere Antwort wäre, wenn Sie eine Erklärung anstelle eines Code-Dumps hinzufügen würden. – CallumDA

+0

Es wurde als Bonusinformation hinzugefügt, da das OP es nützlich finden könnte. Kommentare zur Klärung hinzugefügt. – Niclas

0

Wenn Sie eine Formel-Lösung suchen, würde ich mit dem folgenden gehen:

=HOUR(RIGHT(C24,5))-HOUR(LEFT(C24,5)) 

Welche solange Ihre Werte sind immer im Format vorgesehen funktioniert.

Wenn Sie einen VBA-Lösung suchen ich mit der @ user3598756

Verwandte Themen