• ベストアンサー

エクセルでA列文字中にあるメールアドレスのみをB列に書き出す。

タイトル通りの質問なのですが、 A列に5行程度の文字列があり、その中から<aaa@bbb.co.jp>となっているメールアドレスのみをB列に抽出したいのですが、いい方法を教えて頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • s_yoshi_6
  • ベストアンサー率73% (1113/1519)
回答No.1

メールアドレスを検出するわけではありませんが、もしメールアドレスが< >で囲まれていて、かつ、< >の記号が文章の中でメールアドレスの部分のみに使われているか、他に使われていてもメールアドレスよりも後に使われているのであれば、次の方法を試してみて下さい。 A列にA1から文章が入力されているとして、B1に =MID(A1,FIND("<",A1,1)+1,FIND(">",A1,1)-FIND("<",A1,1)-1) と入力して、以下コピーとします。 B列に< >の中のアドレスが表示されると思います。 なお、< >も含めて抜き出したいのであれば、 =MID(A1,FIND("<",A1,1),FIND(">",A1,1)-FIND("<",A1,1)+1) として下さい。

yuki_usa
質問者

お礼

回答ありがとうございました。 うまくいきました!

その他の回答 (2)

noname#24921
noname#24921
回答No.3

B列に表示したいとのことですが、1個の式で出す方法を思いつかないので、B列とC列に式を入れ、C列に結果を表示する方法を書きます。後でB列は非表示にしておくと良いと思います。 データがA1からA5に入っているとして A列     B列             C列 データ  =SEARCH("@",A1,1)   =IF(COUNT(B1)=1,A1,"") B1とC1に上記の式を入れ、それぞれ5行目までコピーします。 式の意味はB1でアットマークが何文字目か出し、メールアドレスならば数値がでる。C1ではB1に数値が1個あればA1のデータを、数値が無ければ空白を。やってみて下さい。

yuki_usa
質問者

お礼

回答ありがとうございます。 今回はNO1の方に教えていただいた方法でやることになりましたが、 1628taniさんの方法もちょっとチャレンジしてみたいと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 ユーザー定義関数で考えてみました。 こちらは、<...> という区切り文字がなくても、取り出せます。 Alt + F11 で、Visual Basic Editor 画面を開けたら、 メニューの[挿入]-[標準モジュール] をクリックして、白い画面が開いたなら、以下のコードを貼り付けます。貼り付けたら、Alt + F11 で、元の画面に戻ります。 Function PickupADR(文字列 As Variant)  Dim re As RegExp  Dim Matches As Object, M As Object  Dim i As Long, buf As Variant  Set re = CreateObject("VBScript.RegExp")  With re   .Pattern = "\w+@[\w\.]+" 'メールアドレスのパターン   .Global = True   If .test(文字列) Then    Set Matches = .Execute(文字列)    If Matches.Count = 1 Then     PickupADR = Matches(0).Value    ElseIf Matches.Count > 1 Then     ReDim buf(0 To Matches.Count)     For Each M In Matches      buf(i) = M.Value      i = i + 1     Next     PickupADR = buf    End If   End If  End With End Function この関数は、一般的な関数のように使えますが、少し変わった特徴があります。 =PICKUPADR(A1) とすれば、メールアドレスが取り出せますが、ひとつのセルに2つ以上入っている場合は、 =INDEX(PICKUPADR($A$1),1,COLUMN(A1)) として、フィルハンドル・コピーで、右にスライドすれば、次に入っているメールアドレスも取り出せます。

yuki_usa
質問者

お礼

回答ありがとうございました。 私には高度すぎてよくわかりませんでした…。 すみません。時間のある時に確認してみたいと思います。