在EXCEL上用VBAparsing一个string

我试图分析一个文本文件在excel选项卡中导入。

第一列是一个文本代码,用于表示操作的时间线,我会把这个文本代码转换成几秒钟。

文本代码可以这样形成:

5,9h180s -> 21420s 10min -> 600s 3,4h5min30s -> 12570s ... 

我的想法是提取一个正则expression式的值,稍后在函数中使用它们,但我不知道VBA非常好。

EXCEL VBA中是否有函数对string执行正则expression式并从中提取数据?

你有这样的function的例子吗?

在各种组合(以及我自己的一些想象)尝试几次之后,我决定在单元的第一个字母处截断时间值string,这使我可以使用h / m / s作为正则expression式中的最后一个字符 。模式属性 。 这pre-regex准备给了我最好的结果。

在一个标准的模块代码表中,

 Function howManySeconds(strTM As String) As Long Dim s As Long, tmp As String Dim rgx As Object, cmat As Object Dim x As Long, vPTTRNs As Variant Set rgx = CreateObject("VBScript.RegExp") vPTTRNs = Array("[0-9,\.,\s]{1,9}×$", _ "h", 3600, "m", 60, "s", 1) With rgx .Global = True .IgnoreCase = True For x = LBound(vPTTRNs) + 1 To UBound(vPTTRNs) Step 2 If CBool(InStr(1, LCase(strTM), vPTTRNs(x), vbTextCompare)) Then tmp = Replace(Replace(Replace(LCase(strTM), _ "seconds", "s"), "secs", "s"), _ Chr(44), Chr(46)) tmp = Replace(Replace(Left(tmp, InStrRev(strTM, vPTTRNs(x), -1, vbTextCompare)), _ Chr(44), Chr(46)), Chr(32), vbNullString) .Pattern = Replace(vPTTRNs(LBound(vPTTRNs)), Chr(215), vPTTRNs(x)) Set cmat = .Execute(tmp) If CBool(cmat.Count) Then s = s + CLng(CDbl(Replace(cmat.Item(0), vPTTRNs(x), vbNullString)) * vPTTRNs(x + 1)) End If End If Next x End With howManySeconds = s Set rgx = Nothing End Function 

像任何本地工作表函数一样使用。 在C2中,

 =howManySeconds(A2) 

regex_timevalue

你应该注意到(通过右alignment)这些值是真正的数字,可以合计或以其他方式math操纵。 一个自定义的数字格式掩码为0\s_)已被应用来授予他们一个显示的s作为一个单位。


请参阅如何在Microsoft Excel中使用正则expression式(正则expression式)以及在循环中使用正则expression式以获得在VBA中使用正则expression式的良好本地参考。