我有将大约5000行导入到Excel的CSV文件,而我的问题是我有多个时间字符串,例如1h1m1s
,需要将它们转换为Seconds。
以下是一些示例:
列A中的数据
0m11s
2m32s
3m10s
1h2m35s
B列结果
11 seconds
152 seconds
190 seconds
3755 seconds
我尝试格式化单元格,但最终得到一些奇怪的结果!
是否可以这样做,如果可以,那么如何将时间字符串转换为秒?
使用VBA相对容易。
一种方法是使用正则表达式解析字符串,然后将每个部分乘以适当的转换。
要输入此用户定义函数(UDF),请alt-F11
打开Visual Basic编辑器。确保在“项目资源管理器”窗口中突出显示您的项目。然后,从顶部菜单中选择Insert/Module
下面的代码并将其粘贴到打开的窗口中。
要使用此用户定义函数(UDF),请输入如下公式
=convSeconds(A1)
在某些单元格中。
这将只返回秒数,如下所示。如果要附加单词Seconds
,则可以将公式与字符串连接;也可以将公式与字符串连接。或使用自定义数字格式(这将保留结果的数字质量)。
Option Explicit
Function convSeconds(s As String) As Long
Dim RE As Object, MC As Object
Dim SEC As Long
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.ignorecase = True
.Pattern = "(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?"
If .test(s) = True Then
Set MC = .Execute(s)
With MC(0)
SEC = SEC + .submatches(0) * 3600 'hours
SEC = SEC + .submatches(1) * 60 'minutes
SEC = SEC + .submatches(2) 'seconds
End With
End If
End With
convSeconds = SEC
End Function
这是正则表达式的解释
(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?
(?:(\d+)h)?
(?:(\d+)m)?
(?:(\d+)s)?
用RegexBuddy创建
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句