2017-06-13 10 views
0

VBAでのプログラミングにあまり慣れていません。私の目標は、1つの電子メールアドレスを含む複数の単語を含む列を持つ長いExcelファイルを持っているので、私は自分のコリージュに渡すことができるスクリプトを作成することです。例:会社のユーザー[email protected]VBAで列に電子メールが含まれているかどうかを確認する

私の正規表現はすべてのデータを通過しているので、何もフィルタリングできないようです。

Function isEmail(ByVal data As String) 

Dim mailReg As Object 
Set mailReg = CreateObject("VBScript.RegExp") 

Dim regpattern As String 
regpattern = "^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$" 'Expression ok 

Dim arr1() As String 
Dim element As Variant 
Dim strInput As String 

arr1() = Split(data, " ") 

For Each element In arr1 

    If regpattern <> "" Then 
    strInput = element 

    With mailReg 
     .Global = True 
     .MultiLine = True 
     .IgnoreCase = False 
     .Pattern = regpattern 
    End With 

MsgBox (strInput) 

End If 
Next element 
End Function 

私も

For Each element In arr1 

If element Like regpattern Then 
MsgBox (element) 

End If 
Next element 
End Function 

を使用しようとしました。しかし、その後何もメッセージボックスに表示されません。..

+0

'もしregpattern <> "なぜ" Then'が - それは'もし要素であると想定されていないが、<> "" 'Then' –

+0

このコードは混乱です。正規表現が正しくありません。あなたは何をしようとしているのですか?文字列で見つかった各メールのメッセージを表示しますか?そして 'Function'ではなく' Sub'を使います。 –

+0

電子メールアドレスには、 "、!、#、$のような非英数字を含めることができますソース:[Wikipedia](https://en.wikipedia.org/wiki/Email_address) –

答えて

0
Option Explicit 

Const MODULE_NAME As String = "modMail" 

    '' Validate email address 
    Public Function ValidateEmailAddress(ByVal strEmailAddress As String) As Boolean 
     On Error GoTo Catch 

     Dim objRegExp As New RegExp 
     Dim blnIsValidEmail As Boolean 

     objRegExp.IgnoreCase = True 
     objRegExp.Global = True 
     objRegExp.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$" 

     blnIsValidEmail = objRegExp.Test(strEmailAddress) 
     ValidateEmailAddress = blnIsValidEmail 

     Exit Function 

    Catch: 
     ValidateEmailAddress = False 
     MsgBox "Module: " & MODULE_NAME & " - ValidateEmailAddress function" & vbCrLf & vbCrLf _ 
      & "Error#: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
    End Function 
+0

OPにはブーリアンの結果が必要だと思われるのはなぜですか? ? –

+0

ありがとう!booleanを追加して、配列内のどの要素にメールアドレスが含まれているかを確認してからコピーします。 これで動作します。 – Ollpej

0

が、それは、このコードでmailaddressをプリントアウトするためにガット:へ おかげでbraX!

Function isEmail(ByVal data As String) 

Dim mailReg As Object 
Set mailReg = CreateObject("VBScript.RegExp") 

Dim regpattern As String 
regpattern = "^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$" 'Expression ok 

Dim arr1() As String 
Dim element As Variant 
Dim strInput As String 

arr1() = Split(data, " ") 

For Each element In arr1 

    strInput = element 
    mailReg.IgnoreCase = True 
    mailReg.Global = True 
    mailReg.Pattern = regpattern 

    If mailReg.Test(strInput) = True Then 

    MsgBox (strInput) 
    End If 
Next element 
End Function 
関連する問題