VBA数据parsing – regEx循环与用户定义的function

我们已经导入了几个电子邮件(真正的1000+),其中有各种数据的身体。 我正在寻找一种方法来从电子邮件中提取工资范围。 电子邮件如下所示:

你好John Doe,

修正后的电子邮件反映了核准预算工资的变化。

职位描述已经过审查,并且在学术或学术支持单位从事专业工作的情况下,已经从国家人事制度中豁免。

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

这个职位没有资格获得加class费。

UPDATE UPDATE – @ASH精美地回答了我的原始问题,请看下面的答案。 一旦我意识到我的错误,我也修复了UDF函数。 一切正在工作!

这是我的代码:

用户定义的function:

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 

循环子:

 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)不工作,它给我不匹配错误或对象variables错误。

思考?

试用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 

在这里输入图像说明