将包含小时,分钟,秒的string转换为十进制小时

我有一个自动生成的Excel工作表,其中有一列包含代表时间跨度的string值。 这些值具有以下格式:

17 hours, 6 minutes, 16 seconds 

我需要将它们转换为十进制小时(例如17.1小时)。 我怎样才能做到这一点?

您不必使用VBA。 这个工作表公式将做到这一点。

 =24*VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B4," hours, ",":"), " minutes, ",":")," seconds","")) 

这会删除“秒”string,并用“:”字符replace“小时”和“分钟”分隔符string。 VALUE然后将其解释为date/时间,其计算为一天中的一小部分; 所以对于你的“17小时6分16秒”例如0.712685185天。 乘以24得到十进制小时数,即17.1044。

为了使这个更健壮,你可以从空格开始,但是上面给出了你的总体思路。

如果你必须在VBA中做,那么我会这样做:

 Dim myTimeString As String Dim splitTime() As String Dim decimalHours As Double myTimeString = "17 hours, 6 minutes, 16 seconds" ' Remove useless characters myTimeString = Trim(Replace(Replace(Replace(myTimeString, " ", ""), _ ",", ""), "seconds", "")) ' Replace "hours" and "minutes" by a useful delimiter, ":" myTimeString = Replace(Replace(myTimeString, "minutes", ":"), "hours", ":") ' String now looks like this: "17:6:16". Now split it: splitTime = Split(myTimeString, ":") decimalHours = CInt(splitTime(0)) + CInt(splitTime(1)) / 60 + _ CInt(splitTime(2)) / 3600 ' Alternatively, convert the string to a date, then to decimal hours Dim myDate As Date myDate = CDate(myTimeString) decimalHours2 = 24 * CDbl(myDate) ' same result. 

可能有更好的办法,但是这是一个办法。

 hours = Trim(Split(timeString, "hours,")(0)) minutes = Trim(Split(Split(timeString, "hours,")(1), " minutes,")(0)) seconds = Trim(Split(Split(Split(timeString,"hours,")(1)," minutes,")(1), "seconds")(0)) TimeInPercentage = CInt(hours) + (1/60) * (CInt(minutes)) + (1/3600) * CInt(seconds)