概要
「文章の中にメールアドレスが埋まっていて、そこだけ抜き出したい」
「『担当:山田 yamada@example.com まで』のようなセルから、メールだけ取りたい」
こういうときに使えるのが
FIND(位置を探す)+MID(その位置から切り出す) の組み合わせです。
完全な“正規表現”のような厳密チェックまではできませんが、
「@ の位置を手がかりに、前後を読み取ってメールアドレスらしき部分を取り出す」
という実務でよく使うテクニックを、初心者向けにかみ砕いて説明します。
基本の考え方
メールアドレスは、ざっくり言うとこういう形をしています。
ユーザー名 @ ドメイン名
そして、文字列の中で「メールアドレスらしい部分」を見つけるときの手がかりは、
ほとんどの場合 @(アットマーク) です。
なので、考え方の流れはこうなります。
- FIND で「@ が何文字目にあるか」を探す
- そこから前後にどれくらい文字があるか(長さ)を決める
- MID で「その位置から、その長さぶん切り出す」
厳密に「ここからここまでがメールアドレス」と判定するのはなかなか難しいですが、
「大体このくらいの長さ」という前提を置いてやると、実用レベルの抽出ができます。
FIND 関数で「@ の位置」を探す
FIND の基本
=FIND(検索文字列, 対象文字列, [開始位置])
メールアドレス抽出では、よくこう使います。
=FIND("@", A2)
A2 の中で、「@」が左から何文字目にあるかを返します。
例えば A2 にお問い合わせは yamada@example.com まで
という文字列が入っている場合、
=FIND("@", A2)
の結果は、「@」がある位置(例えば 14 文字目くらい)が返ってきます。
この「位置」を起点にして、MID で前後を切り取るイメージです。
MID 関数で「位置から文字を切り出す」
MID の基本
=MID(文字列, 開始位置, 文字数)
例えば、A2 にyamada@example.com
が入っているとして、
=MID(A2, 1, 6)
→ 1文字目から 6 文字 → yamada
=MID(A2, 8, 11)
→ 8文字目から 11文字 → example.com
FIND で求めた「@ の位置」を使うことで、
「@ を含む前後の範囲」を MID で切り出す、という流れが作れます。
シンプルなテンプレート:メール部分だけが入っている場合
まずは一番簡単なケースとして、
「セルの中身が“メールアドレスだけ”」の場合を考えます。
A2:yamada@example.com
このとき、
「@ の位置」「@ より前の長さ」「@ より後ろの長さ」が分かっていれば、
MID で分解や再利用ができます。
ユーザー名(@より前)を取り出す
=LEFT(A2, FIND("@", A2)-1)
- FIND(“@”, A2) … 「@ の位置」
- そこから 1 引くと → 「@ の前の文字数」
- LEFT で先頭からその文字数ぶん取り出す
結果:yamada
ドメイン(@より後ろ)を取り出す
=MID(A2, FIND("@", A2)+1, 255)
- FIND(“@”, A2)+1 … 「@ の直後の位置」
- 文字数は大きめ(255など)にしておけば、実質「最後まで」
結果:example.com
このように、
「@ の位置」+MID(または LEFT / RIGHT)で
メールアドレスを分解できます。
応用1:文章の中から“メールアドレス全体”を抜き出す簡易パターン
本題の「メールアドレス抽出」です。
ここでは「メールアドレスは最大 30 文字くらい」と仮定して、@ の少し前から、少し後ろまで をまとめて抜き出す簡易パターンを紹介します。
A2:お問い合わせは yamada@example.com まで
この中から「yamada@example.com」だけ取りたいとします。
ざっくり、
- 「@ の前に 10 文字分」
- 「@ を含めて後ろに 20 文字分」
くらいを切り出せば、多くのメールアドレスをカバーできます。
例:
=MID(
A2,
FIND("@", A2)-10,
30
)
説明:
- FIND(“@”, A2)-10
→ 「@ の 10 文字前」からスタート(ユーザー名が長いほど前にさかのぼるイメージ) - 30
→ 合計 30 文字ぶん切り出す(ユーザー名+@+ドメインを含む長さの想定)
ただし、このままだと
- 文字列の先頭より前に行ってしまう場合(FIND-10 が 1 より小さい)
- 前後に余計な文字が混じる場合
など、実務ではちょっと荒いです。
「実務用の簡易抽出」としては、
- 「メールアドレスっぽいテキストだけが入っている列」を用意する
- そこに「名前+メール」などをコピー
- 上記のような MID+FIND で大まかに取り出し、
さらに不要な前後を SUBSTITUTE や TRIM で整える
という流れで調整していくことが多いです。
応用2:決まった形式からメールだけ抜き出す
一番使いやすいのは、
「ある程度一定のパターンの文字列」から抜き出す場合です。
例:A2 に必ず名前<メールアドレス>
という形で入っているとします。
A2:山田 太郎 <yamada@example.com>
この場合、
「< の位置」と「> の位置」を FIND で探せば、
その間を MID で確実に抜き出せます。
=MID(
A2,
FIND("<", A2)+1,
FIND(">", A2) - FIND("<", A2) - 1
)
説明:
- FIND(“<“, A2)+1
→ 「<」の直後の位置が、メールアドレスの先頭 - FIND(“>”, A2) – FIND(“<“, A2) – 1
→ 「> と < の間の文字数」=メールアドレスの長さ
結果:yamada@example.com
このように、
「前後をはさむ記号(< > や 括弧)が一定」のときは、
MID+FIND の組み合わせで、かなりきれいにメールだけ抜き出せます。
応用3:区切り文字(スペースやカンマ)で前後が決まっている場合
例えば A2 に
山田 yamada@example.com 営業部
と入っていて、
- メールの前はスペース
- メールの後ろもスペース
という前提がある場合。
- @ の前で一番近いスペースを探す
- @ の後ろで一番近いスペースを探す
- その間を MID で切り出す
というロジックを組むこともできますが、
これは FIND と SUBSTITUTE を組み合わせる少し上級のパターンになります。
初心者向けには、まず
- 「< > で囲まれている」
- 「常に 〇列目にはメールだけが入るようにコピーしてくる」
といった“ルールを決めた上で”
MID+FIND を使う、というやり方から慣れていくのがおすすめです。
例題
問題1
A2 に「yamada@example.com」というメールアドレスだけが入っています。
この中から、ユーザー名(@より前)だけを取り出して「yamada」と表示する式を書いてください。
FIND と LEFT を使ってください。
=LEFT(A2, FIND("@", A2)-1)
問題2
A2 に「yamada@example.com」というメールアドレスだけが入っています。
この中から、ドメイン部分(@より後ろ)だけを取り出して「example.com」と表示する式を書いてください。
FIND と MID を使ってください。
=MID(A2, FIND("@", A2)+1, 255)
問題3
A2 に「お問い合わせは yamada@example.com まで」という文字列が入っています。
この中から「@ の10文字前」から「合計30文字」を切り出し、
メールアドレスを含む部分を取り出したいです。
MID と FIND を使った式を書いてください。
=MID(A2, FIND("@", A2)-10, 30)
(※実務では前後の不要文字が含まれる可能性があります)
問題4
A2 に「山田 太郎 mailto:yamada@example.com (example.com in Bing)」という文字列が入っています。
この中から「< と > の間」にあるメールアドレスだけを取り出して表示したいです。
MID と FIND を組み合わせた式を書いてください。
=MID(A2, FIND("<", A2)+1, FIND(">", A2) - FIND("<", A2) - 1)
問題5
A2 に「担当:山田 yamada@example.com」という文字列が入っています。
この中で、「@ の位置」そのもの(何文字目か)を調べたいです。
FIND を使った式を書いてください。
=FIND("@", A2)
メールアドレス抽出の本質は、
- FIND で“目印(@ や < > など)の位置”を押さえる
- MID(+LEFT/RIGHT)で“その位置から必要な長さ”を切り出す
この 2 ステップです。
まずは「メールだけが入っているセル」を題材に、
ユーザー名・ドメインの分解から慣れていくと、
文章の中からの抜き出しにも少しずつ応用できるようになっていきます。
