2012-12-23 32 views
-2

我需要將時間從14:54轉換爲雙14 + 54/60。而我這樣做與下面的代碼:VBA轉換時間

Private Function Omzetten(ByVal time As String) As Double 
Dim min As Integer, hours As Integer, datum As Date 
datum = CDate(time) 
min = DatePart("n", datum) 
hours = DatePart("h", datum) 
Omzetten = hours + min/60 
End Function 

但是,當時間是26:00,他只給2,因爲26-24是2。所以,我認爲廣告天= DATEPART(「d」,數據) ,但他總是讓天= 30.有沒有人有解決方案?

+0

26:00是不是有效的時間?但是,添加更多細節,如果您想在26小時內接受26:00,則需要自己的例程而不是僅使用期望有效時間的內置插件。 – PeterJ

+0

作爲一個提示,你會想要分隔冒號兩邊的字符串(假設你不想要秒),轉換爲數字,然後做你的計算,所以30:10是有效的。 – PeterJ

+0

是的你是對的,它不是時間,而是一定週期的持續時間。所以26是有效的。但我不知道「你自己的例程是什麼意思,而不是使用期望有效時間的內置程序」。我很新vba – user1888663

回答

1

試試下面,我用VB.Net從上面看起來像它必須與新的VBA兼容型號:

Private Function Omzetten(ByVal time As String) As Double 
    Dim Hours As Integer = CInt(time.Substring(0, time.IndexOf(":"))) 
    Dim Minutes As Integer = CInt(time.Substring(time.IndexOf(":") + 1)) 
    Return Hours + Minutes/60 
End Function 

就像一個音符,你可能要添加一些額外的檢查,上述例如代碼將在非數字輸入上失敗,或者如果時間不包含冒號。你可能想要的東西更像以下,以應付不同的輸入:

Private Function Omzetten(ByVal time As String) As Double 
    Dim Hours As Integer = 0 
    Dim Minutes As Integer = 0 
    Dim HoursStr As String 
    If time.IndexOf(":") = -1 Then 
     HoursStr = time 
    Else 
     HoursStr = time.Substring(0, time.IndexOf(":")) 
    End If 
    If IsNumeric(HoursStr) Then 
     Hours = CInt(HoursStr) 
    End If 
    If time.IndexOf(":") >= 0 Then 
     Dim MinutesStr As String = time.Substring(time.IndexOf(":") + 1) 
     If IsNumeric(MinutesStr) Then 
      Minutes = CInt(MinutesStr) 
     End If 
    End If 
    Return Hours + Minutes/60 
End Function 
+0

它不起作用。我認爲這和我的問題一樣。作爲一個字符串的時間不是hh:mm,它是一個數字0,236728因此代碼不起作用。 – user1888663

0

如果總是在格式hours : mins然後使用以下:

Dim str As String 
Dim strSplit() As String 
Dim Val As Double 

str = "26:00" 
strSplit = Split(str, ":") 

Val = CInt(strSplit(0)) + CInt(strSplit(1))/60 
+0

我知道,但問題是當我將值從單元格中取出並將其轉換爲字符串26:00成爲0,0347222222,我不能這樣做與0,0347222222 .. – user1888663

+0

是的,因爲你格式化單元格作爲一般隱藏類型爲日期這是不是你想要的(你會得到一天中的一小部分)。相反,將文本格式設置爲文本格式,一切都將起作用。 – InContext

+0

我認爲你應該寫CInt(strSplit(1))/ 60 – titus

0

我認爲你可以用基本的Excel公式實現這一目標。

如果您將任何時間除以1/24(即一小時),則時間以數字形式存儲,您將以雙倍的形式獲得答案。

注意 - 如果要超過24個小時(如26:00),然後設置單元格的自定義格式使用時間[h]:mm:ss

例子

A  B 
1 14:54 =A1/(1/24) // = 14.9 
2 26:00 =A1/(1/24) // = 26.0 

這是否幫助?

+0

不,它沒有幫助。我認爲它與單元格屬性有關,因爲它是「自定義」的,當我將其更改爲「常規」時,它從「0:50」變爲0,0347222222。所以這一切都不起作用,這就是爲什麼我卡住了。 – user1888663

+0

你爲什麼要將它改爲一般?你能不能把你輸入的單元格的格式設置成'[h]:mm:ss'? –

+0

他們被設置爲h:mm,但非想法的工作.. – user1888663