2016-11-20 58 views
0

區別我有一個列有值Excel的VBA - 找出以小時

09:00 - 21:00

試圖找出我怎麼能得到以小時爲單位的差異,即。對於這個例子12

+0

您是否在尋找一個VBA或Excel的解決方案? – CallumDA

+0

如果您正在尋找VBA解決方案,那麼'DateDiff'函數看起來就是您需要的。此函數返回所選單位中兩個日期之間的差異,從幾秒到幾年。你不說9點和21點如何舉行。如果他們被關在牢房裏,他們可能被當作日期。 Excel的日期是雙打。整數部分是自1/1/1900以來的天數,小數部分是SecondsSinceMidnight/SecondsInDay。 –

回答

2

您可以按如下

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

@ user1049961 - 請注意,解決方案只是減去兩次的小時部分,即完全忽略分鐘。因此,「09:00 - 21:59」和「09:59 - 21:00」都報告爲12小時,即使第一小時是12小時59分鐘,第二小時只有11小時1分鐘。 – YowE3K

0

如果您09.00 - 21.00是在細胞B7使用此功能

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

在你的主代碼被利用,那麼這個工程:

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

非常暴力,因爲它假設ti我永遠是00.00並且不會包含任何其他字符。

+0

我剛剛試過這個,單元格B7包含給出的例子和我的表達式如下所示,它的工作原理 - 在編輯示例時間時更改結果。你怎麼能回答「它假設時間總是00.00」 - 你真的測試過,因爲我已經做了兩次... –

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

OP特別要求在幾小時內的差異,所以我不認爲分鐘是必要的。另外,如果你添加了一些解釋而不是代碼轉儲,我認爲這將是一個更好的答案 – CallumDA

+0

作爲獎勵信息添加它,因爲OP可能會發現它有用。爲澄清添加了評論。 – Niclas

0

如果你正在尋找一個公式的解決方案,我會用下面去:

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

只要你的價值觀總是在提供的格式工作。

如果你正在尋找一個解決方案VBA我與的@去user3598756