2016-11-01 8 views
0

Hullo!非常に長いテキスト文字列のメールをExcelで検索する

私はいくつかの本当の汚いデータ(nice!)をExcelで使っていますが、いくつかの助けがあります。

非常に長いテキスト文字列を持つセルがあります。それらには、電子メールのアドレスがあります。私は電子メールアドレスだけを抽出しようとしています。 FIND関数とsubstituteを使用してみましたが、それ以外のものはすべて文字列から取り除きましたが、文字列が長すぎます。

私の2番目の解決策は、単に文字列全体を文字列にテキスト化し、その中に "@"が付いたセルを見つけて、別のシートに配置することでした。何らかの理由で、私は絶対に立ち往生して、今私の脳が溶けてしまったので、私はあなたの何人かが私を助けることを望んでいます!

現在、私は私の列の大規模な範囲で、@の数を示します

=COUNTIF(Email!D8:ZZ8,"*@*") 

でね。しかし、私は2枚目のシートに実際に電子メールを印刷する方法を見つけることができません。私はINDEXまたはMATCHを使用することを考えていましたが、ちょっと気になることには見えません。

要するに、非常に広い範囲の列に@を含むセルの値を取得しようとしています。あるいは、非常に大きなテキスト文字列で電子メールを抽出します。そして私の脳は溶けました。

ありがとうございます!

編集:私は、データがどのように見えるかを尋ねてきたので、例のテキストは:

機密情報がそれでありますので、私はこのような何かのためにそれを変更した、すべての機密情報を隠しているが、あなたが与えますフォーマットのアイデア: 政府は、コンピュータのもので、かなりひどいですので、不十分最適化されたものの、自動的にExcel文書に送信されたウェブ フォームから生成された1800個の文字を持っている

コンテンツ。政府はかなりコンピュータのもので がひどいので、 1800文字が自動的にWebフォームから生成され、 Excel文書に送信されたコンテンツ、最適化が不十分です。 がさまざまな種類のものを許可するウェブサイト、AN EMAIL SERVERを介してA HUMANから電子メールが送信されました。ウェブプロトコルA NUMBER に従って、このメールのFROMフィールドには、一般的なノーリプライ [email protected]のアドレスが設定されていますが、HUMANは のメールアドレス([email protected])を提供しています。 REPLY-TOフィールドに含まれています。 EMAIL サーバー訪問の詳細については [email protected]をで人間に返信してくださいwebadress.comウェブプロトコルについてNUMBER 訪問の詳細を学ぶ:website.com/ http://anemailserver.emailautomaticallysent.com/wf/open?upn=a0CozdHDIYk-2F-2FE-27BDepiWoypG2sQgscftG6HHFFnds8gumLwFG5a91q5dYWchJq-2FS-2FxPwyA-2BRmi77imC9JC2ukUdYS8sqn0WplhHLgUkBT4OVuD4FxAUMSv1sBHGrqdEvBLARp6Ppqth1SdmKl2k4kG5IXQ73J2qGBxZ2FFgSa5wmQXQ9XyFyUsLSPvy4goLbRzaMIfl3u-2BNA1zx5FC2P6mN0komOQDVcbfPsUv2Qm57Fwc95UAD0E2f7ZsxOBXRKmwKSQjnA9ImBwK3wf3TY8vgTeV4N0jD05Oj4F8IK3JIssog6GVNNZ1-2BvLQnZmlVGa7h0WeuauDrGVDCeFcuFa-2BeXVdzpcwlWii2i

+0

あなたのニーズを理解するためのモックデータを提供できますか? VBAは実行可能なソリューションですか?空のスペースの場合は@以外のすべての特殊文字を置き換えることができますが、スペースを分割してスペースを分割し、配列全体をループし、 'If varArray(i)Like" *@*.* "でテストしてください。電子メールに似た文字列。 – nbayly

+0

秒これ。あなたが参照する長いテキスト文字列の1つを提供できますか? – bdpolinsky

+0

オリジナルの投稿を編集して情報を追加しました –

答えて

0

コピーブックのVBAモジュールの下にあるコードをクリックします。

(あなたはVBAモジュールとマクロについては何も知らない場合は、http://www.excel-easy.com/vba/examples/run-code-from-a-module.htmlを参照してください)

マクロを実行しExtract、電子メールを含むセルを選択し、[OK]をクリックすると、電子メールは、アクティブセル内に配置され、以下。

GetEmails関数は、範囲から直接呼び出すこともできます(配列式)。

Function GetEmails(Text As String) 

    Set Regex = CreateObject("vbscript.regexp") 
    Regex.Pattern = "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
    Regex.Global = True 

    Set Matches = Regex.Execute(Text) 

    Dim I As Integer, Count As Integer, Arr() 

    Count = Matches.Count 

    If Count Then 
     ReDim Arr(1 To Count, 1 To 1) 
     For I = 1 To Count 
      Arr(I, 1) = Matches(I - 1) 
     Next 
     GetEmails = Arr 
    Else: GetEmails = xlErrNA 
    End If 

End Function 

Sub Extract() 

    Dim Cell As Range 
    On Error GoTo Err 
    Set Cell = Application.InputBox("Select the cell containing emails.", Type:=8) 
    On Error GoTo 0 
    Dim Arr, P As Range 
    Arr = GetEmails(Cell(1).Value) 
    If TypeName(Arr) <> "Variant()" Then Exit Sub 
    Set P = ActiveCell.Resize(UBound(Arr, 1)) 
    P = Arr 
    P.Select 

Err: 
End Sub 
関連する問題