要点 —
FINDとSEARCHは文字列を切りません。文字列の一部がどこから 始まるかを数値で教えてくれます。FIND("@", A2)は@の位置を返し、その数値をMID/LEFTに渡すことで、脆い位置の ハードコードではなく内容で切り出せます。どちらを使うかを決める違いは2つです。FINDは大文字小文字を区別し、ワイルドカードを受け付けません。SEARCHは 区別せず、*と?を受け付けます。 そして列全体を真っ赤に染める罠が あります。一致がないとき、両方とも#VALUE!を返します — 0 でも空でも ありません。だからIFERRORで包むか、ISNUMBERで判定してください。すべての Excel バージョンで動作します。
=FIND("@", A2) ' @ の位置(大文字小文字を区別、完全一致)
=SEARCH("st", A2) ' "st"/"ST"/"St" の位置(大文字小文字を区別しない)
=ISNUMBER(SEARCH("paid", A2)) ' A2 が "paid" を含めば TRUE(大文字小文字不問)
FIND と SEARCH は、単独では最も使われず、他の数式の中で最も使われる
関数です — そしてそれこそが要点です。これらはテキスト抽出を信頼できるものに
する GPS です。これらを理解すれば、脆い RIGHT(A2, 4) の癖は消えます。
この記事で学べること
- なぜ
FIND/SEARCHはテキストではなく位置を返すのか — そしてそれをどう 使うのか - 本当に重要な2つの違い: 大文字小文字の区別とワイルドカード
- 一致がないとなぜ
#VALUE!を返すのか、そしてその扱い方2通り - きれいな「含むか?」判定のための
ISNUMBER(SEARCH(...))の定石 - 3番目の引数を使って2回目の出現を探す方法
考え方の軸: 切る道具ではなく、目印を見つける道具
LEFT・MID・RIGHT は切ります。FIND と SEARCH は位置を特定します。
これらはただ1つの問いに答えます — 「この部分文字列は何文字目から始まるのか?」 —
そして数値を返します。単独ではその数値は役立たずに見えますが、その役割は MID
の start_num や LEFT の長さ引数になることです。
' メールのドメインを取得: @ 以降すべて
=MID(A2, FIND("@", A2) + 1, 99)
' 名前を取得: 最初の空白より前すべて
=LEFT(A2, FIND(" ", A2) - 1)
これが、位置ベースの切り出しを内容ベースの切り出しへ変える組み合わせです。 「1文字目から5文字目を取れ」と言うのをやめ、「空白がどこにあろうと、そこまでを 取れ」と言い始めます。切り出しはもう形を仮定せず、データに追従します。
すべてを解き明かす規則: FIND と SEARCH の違いは1つではなく2つ
人は「FIND は大文字小文字を区別する」を覚えていて、同じくらい重要な2つ目の 違いを忘れます。全体像はこうです。
| 大文字小文字 | ワイルドカード(* ?) |
|
|---|---|---|
FIND |
区別する — "a" ≠ "A" |
非対応(文字どおりに扱う) |
SEARCH |
区別しない — "a" = "A" |
対応 |
つまり:
=FIND("s", "Sales") ' 5 — 小文字の s。大文字の S は飛ばされる
=SEARCH("s", "Sales") ' 1 — 大文字の S に一致、大文字小文字は無視
=SEARCH("a?c", A2) ' "a"、任意の1文字、"c" を探す — SEARCH だけができる
=FIND("a?c", A2) ' 文字どおりの "a?c" を探す
判断は単純です。大文字小文字が重要なとき、または探したい文字列に本来なら
ワイルドカードとして働く文字が含まれるときは FIND を、寛容で人間的な一致が
ほしいときは SEARCH を選びます。 「このセルは大文字小文字を問わず 'paid' に
言及しているか?」なら、SEARCH が正しい道具です。
#VALUE! の罠: 一致なしはゼロではなくエラー
これは誰もが驚く挙動です。部分文字列が存在しないとき、FIND と SEARCH は 0
や空文字列を返さず、#VALUE! を返します。一部の行に部分文字列がない列にこれを
落とすと、列全体が真っ赤に灯り、それを参照するあらゆる数式を道連れにします。
何をしているかに応じて、きれいな対処が2つあります。
' 抽出するが、区切り文字がない行があるかもしれない場合:
=IFERROR(MID(A2, FIND("-", A2) + 1, 99), A2) ' 文字列全体にフォールバック
' 存在の判定だけ — 抽出はまったくしない:
=ISNUMBER(SEARCH("urgent", A2)) ' TRUE / FALSE、決してエラーにならない
その2つ目の定石こそ覚えるべきものです。ISNUMBER(SEARCH(needle, haystack)) は、
Excel で大文字小文字を区別しない**「含む」**判定をする方法です。IF・FILTER・
条件付き書式と組み合わせれば、ある語に言及するすべての行に印を付けられます。
どんな COUNTIF のワイルドカード曲芸よりきれいで速く、決してエラーを投げません。
3番目の引数: 2回目の出現を探す
どちらの関数も省略可能な start_num(検索を始める位置)を取ります。主な用途は、
最初の一致を飛び越えて次を見つけることです。
=FIND("-", A2) ' 1つ目のハイフンの位置
=FIND("-", A2, FIND("-", A2) + 1) ' 2つ目のハイフンの位置
そのように入れ子にしてn番目の出現に届かせるあたりで、これらの数式は読みやすさを
失います。出現回数を数えている自分に気づいたら、それは
TEXTSPLIT(区切り文字で分割し、ほしい
部分を取る)か Power Query に切り替える合図です。
判断のポイント
FIND と SEARCH がほぼ単独で現れることはありません — もし単独で使っているなら、
おそらく生の位置ではなく ISNUMBER(SEARCH()) の「含む」判定がほしいはずです。
これらの本当の住処は MID/LEFT/REPLACE の内側で、切り出しが内容に追従する
よう位置を供給することです。完全一致で大文字小文字を意識した文字どおりの一致には
FIND を、寛容でワイルドカードを使う人間的な一致には SEARCH を選びます。そして、
一致がなかったときに何が起こるかを決めずにどちらも書いてはいけません — #VALUE!
は「うっかり」ではなく、文書化された挙動です。入れ子が3段になったら、手を止めて
文字列を分割してください。
ExcelMaster はどう役立つか
メールのドメイン、2番目と3番目のハイフンの間のテキスト、最後のカンマより後の
住所部分 — これらは FIND/SEARCH のパズルであり、面倒なのは +1/-1 の
オフセットと一致なしの処理です。ExcelMaster は平易な日本語の説明から式全体を
書きます — 正しいアンカー、すでに組み込まれた IFERROR か ISNUMBER のガード、
そしてあなたの大文字小文字の必要に合わせて選ばれた FIND か SEARCH。目印を
挙げれば、位置の計算はやってくれます。
よくある質問
Excel の FIND と SEARCH の違いは何ですか?
2つあります。FIND は大文字小文字を区別し、*/? を文字どおりの文字として
扱います。SEARCH は大文字小文字を区別せず、それらのワイルドカードに対応します。
完全一致で大文字小文字を意識した一致には FIND を、寛容な一致には SEARCH を
使います。
FIND はなぜ #VALUE! を返すのですか?
探している部分文字列がテキストの中にないからです。FIND と SEARCH は一致が
ないとき、0 や空ではなく #VALUE! を返します。式を IFERROR(...) で包むか、
先に ISNUMBER(SEARCH(...)) で判定してください。
セルが特定のテキストを含むか確認するには?
=ISNUMBER(SEARCH("word", A2)) を使います。これは TRUE か FALSE を返し、
大文字小文字を無視します。大文字小文字を区別したい場合は SEARCH を FIND に
入れ替えます。位置を直接使う場合と違い、これは決してエラーを投げません。
文字の2回目の出現を探すには?
省略可能な3番目の引数(start_num)を渡し、最初の一致の後から検索を始めます。
=FIND("-", A2, FIND("-", A2) + 1) は2つ目のハイフンの位置を返します。2回目より
先は、読みやすさのために TEXTSPLIT を検討してください。
FIND や SEARCH はワイルドカードに対応していますか?
SEARCH だけです。SEARCH("a?c", A2) は「a」、任意の1文字、続いて「c」に一致
します。FIND は ? と * を、探すべき文字どおりの文字として扱います。
検証環境
検証環境: Excel 365 (Windows 11) — 最終確認 2026-06-29。
関連ガイド: Excel LEFT・RIGHT・MID · Excel SUBSTITUTE・REPLACE · Excel TEXTSPLIT · Excel IFERROR
