2011-12-06 7 views

답변

15

VBA를 사용할 필요가 없습니다. 이 워크 시트 수식은 트릭을 수행합니다.

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

이는 "초"문자열을 삭제하고 : 문자로 "시간"과 "분"구분 기호 문자열을 대체합니다. 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. 
+0

하나는 시간 간격이 일을 한 무슨 경우 : – aevanko

+0

장을, 어떻게 작동하는지 잘 쓰여진 설명 그 안에? 나는 일/일 대체를 추가하려고했지만 작동하지 않았다 : S –

+0

VBA 솔루션을 자동으로 가정하지 않기 때문에 +1. – JimmyPena

2

더 좋은 방법이있을 수 있지만,이 방법 중 하나입니다.

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) 
관련 문제