2014-01-09 48 views
0

我是VBA新手,正在研究一个子程序,它可以帮助我将通话记录转换为有用的分析内容。VBA转换奇怪格式的时间

B列包含的值指的是电话的持续时间,但格式很奇怪。这里有一些值:

47S 472ms

53S 844ms

55S 164ms

200万17S

1MN 5S

1MN 25S

正如你所知道的,如果通话时间少于1分钟,格式为secon ds然后毫秒。如果通话时间大于1分钟,则格式为几分钟然后秒。

我需要将这些值转换为秒(因此忽略它们出现时的毫秒数)。

你介意帮我写VBA代码吗?谢谢!

+0

你想忽略几毫秒或是向上/向下四舍五入吗? '53s 844ms'应该变成'53s'还是'54s'?您是否也希望以正确的时间格式格式化单元格'HH:MM:ss'? –

+0

谢谢,亚历克斯P.理想情况下,我想四舍五入向上/向下毫秒。至于你的第二个问题,我希望这个值是以秒为单位的,所以如果时间是1毫秒5秒,新值应该是65.如果这个值是53秒844毫秒,那么新值应该是54.让我知道你是否需要任何更多的澄清。本 – blahblahblah

+1

感谢pnuts。是的,该公式的作品,我有一个类似的公式,但我真的在寻找可以添加到子例程的VBA代码。 – blahblahblah

回答

0
Public Function ConvertTime(ByVal sTime As String) As Date 

    Dim vaSplit As Variant 
    Dim lSeconds As Long 
    Dim lMinutes As Long 

    Const sSEC As String = "s" 
    Const sMIN As String = "mn" 

    vaSplit = Split(sTime, Space(1)) 

    If Right$(vaSplit(0), 1) = "s" Then 
     lSeconds = Val(Replace(vaSplit(0), sSEC, vbNullString)) 
    Else 
     lSeconds = Val(Replace(vaSplit(1), sSEC, vbNullString)) 
     lMinutes = Val(Replace(vaSplit(0), sMIN, vbNullString)) 
    End If 

    ConvertTime = TimeSerial(0, lMinutes, lSeconds) 

End Function 
+0

非常感谢! – blahblahblah

+0

@ bfs1990:如果对您有帮助,请将答案标记为已接受。 – Manhattan

+0

谢谢你的提示。我不知道该怎么做! – blahblahblah