-2

我需要将时间从 14:54 转换为双 14+54/60。我使用以下代码执行此操作:

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。所以我想广告 day = DatePart("d", datum),但后来他总是给 day = 30。有人有解决方案吗?

4

3 回答 3

2

如果它始终采用格式,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
于 2012-12-23T12:54:30.093 回答
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
于 2012-12-23T11:45:32.357 回答
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

这有帮助吗?

于 2012-12-23T13:20:11.143 回答