さまざまなデータを含む複数の電子メール(実際は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)が動作していない、それは私の不一致エラーが発生しますまたは変数オブジェクトエラー。
思考?
おかげで、それはタイムアウトエラーで実行されますが、結果を生成しません。私はそれに時計を置くと、Set reg = CreateObjectの後にreg.testの "間違った引数の数"と言い、ループの中でr.offset(、1).valueをスキップします。それは真実に戻っていない。思考? –
@JasonLeachデータはどこにありますか? C列にありますか?そして、それがエラーなしで実行されていると言うので、reg.test *の "引数の数が間違っています"とはどのように言いますか? –
データは列C yesにあり、「If reg.test(r.Text)Then」に進み、「r.Offset ....」をスキップして「End If」にスキップします。私が正しいと理解しているならば、 "もしreg.testなら"が真実に戻っていないようです。それは理にかなっていますか?ありがとう! –