将包含小时,分钟,秒的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)