Mad*_* D. 0 excel vba excel-vba
我有一个自动生成的Excel工作表,其中包含一个包含表示时间跨度的字符串值的列.值具有以下格式:
17 hours, 6 minutes, 16 seconds
Run Code Online (Sandbox Code Playgroud)
我需要将它们转换为显示小数小时(例如17.1小时).我怎样才能做到这一点?
Jea*_*ett 15
您不必使用VBA.这个工作表公式将起到作用.
=24*VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B4," hours, ",":"),
" minutes, ",":")," seconds",""))
Run Code Online (Sandbox Code Playgroud)
这将删除"seconds"字符串,并用该字符替换"hours"和"minutes"分隔符字符串:.VALUE然后将其解释为日期/时间,评估为一天的一小部分; 所以对于你的"17小时,6分钟,16秒"的例子,0.712685185天.将此乘以24得出小数小时,即17.1044.
为了使这个更加健壮,你可以从SUBSTITUTE空间开始,但上面给出了一般的想法.
如果你必须在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.
Run Code Online (Sandbox Code Playgroud)