我们已经导入了几封电子邮件(实际上是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)不起作用它会给我不匹配错误或对象变量错误。
思想?
答案 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