2017-05-05 8 views
1

さまざまなデータを含む複数の電子メール(実際は1000+)の本文をインポートしました。私は電子メールから給料の範囲を抽出する方法を見つけることを探しています。電子メールは、次のようになります。ここではVBAデータの解析 - ユーザー定義関数を使用したregExループ

こんにちはジョン・ドウ、

承認された予算 給与の変化を反映した改正メールです。

学術または学術支援ワークユニットで職務を遂行することに基づいて、職員の説明が審査され、州の人事制度から免除されました。

完全な給与の範囲は、$ XX、XXXから$ XXX、XXXです。承認された予算 の給与は$ XX、XXXです。

このポジションは、残業補償の対象外です。

UPDATE UPDATE - @ 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 

ループサブ:

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

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

+0

おかげで、それはタイムアウトエラーで実行されますが、結果を生成しません。私はそれに時計を置くと、Set reg = CreateObjectの後にreg.testの "間違った引数の数"と言い、ループの中でr.offset(、1).valueをスキップします。それは真実に戻っていない。思考? –

+0

@JasonLeachデータはどこにありますか? C列にありますか?そして、それがエラーなしで実行されていると言うので、reg.test *の "引数の数が間違っています"とはどのように言いますか? –

+0

データは列C yesにあり、「If reg.test(r.Text)Then」に進み、「r.Offset ....」をスキップして「End If」にスキップします。私が正しいと理解しているならば、 "もしreg.testなら"が真実に戻っていないようです。それは理にかなっていますか?ありがとう! –

関連する問題