VBA数据解析 - 带有用户定义函数的regEx循环

时间:2017-05-05 03:58:59

标签: excel vba excel-vba

我们已经导入了几封电子邮件(实际上是1000多封),其中包含各种数据。我希望找到一种从电子邮件中提取工资范围的方法。电子邮件看起来像这样:

  

你好John Doe,

     

以下是经修订的电子邮件,反映了已批准预算的变更情况   薪水。

     

职位描述已经过审核,并已免除   基于执行专业工作的国家人事制度   学术或学术支持工作单位。

     

全薪范围是$ XX,XXX到$ XXX,XXX。批准的预算   工资是XX,XXX。

     

此职位不符合加班费的条件。

更新更新 - @ A.S.H。很好地回答了我原来的问题,请看下面的答案。一旦我意识到我的错误,我也修复了UDF功能。现在一切正常!

这是我的代码:

用户定义的功能:

Function GetDollars(s As String, item As Long)
    With CreateObject("vbscript.regexp")
        .Global = True
        .Pattern = "\$\d*[,\d]*\d*"
        On Error Resume Next
        If .test(s) Then Set GetDollars = .Execute(s)(item - 1)
        If Err <> 0 Then GetDollars = vbNullString
    End With
End Function

Loop Sub:

Sub salaryRanges()
'Loops through the Email Body and pull out Salary Ranges
Dim strText As String

lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

Set selCol = Range("C1:C" & lastRow)

 For Each oRng In selCol
    strText = oRng.Value
    oRng.Offset(0, 1).Value = GetDollars(strText, 1)

Next

Set oRng = Nothing

End Sub

列(0,0)不起作用它会给我不匹配错误或对象变量错误。

思想?

1 个答案:

答案 0 :(得分:0)

使用RegExp

进行尝试
Sub ExtractSalaryRange()
  Dim r As Range, reg As Object
  Set reg = CreateObject("VBScript.RegExp")
  reg.MultiLine = True: reg.Global = True
  reg.Pattern = "^(The full salary range is )(.*)$"

  For Each r In wsData.Range("C1", wsData.Cells(Rows.Count, "C").End(xlUp))
    If reg.test(r.Text) Then
      r.Offset(, 1).value = reg.Execute(r.Text).Item(0).SubMatches(1)
    End If
  Next
End Sub

enter image description here