Excelで「商品コードのハイフンが何文字目にあるか調べたい」「メールアドレスの@の位置を取って、その前後を切り出したい」と思ったことはありませんか? LEFT・MID・RIGHT関数は知っていても、「切り出し位置を自動で判定する」までつながらないと、結局セルごとに手作業で文字数を数える羽目になりますよね。
そんなときに使えるのが FIND関数(ファインド関数)です。 FIND(ファインド)は英語で「見つける」を意味し、指定した文字が何文字目にあるかを返してくれます。 返した位置をLEFT・MID・RIGHTの引数にそのまま渡せば、商品コード・メールアドレス・カッコ付き文字列を一発で分解できます。
この記事では、FIND関数の基本構文からSEARCH関数との違い、LEFT・MID・RIGHTとの組み合わせ実例3パターン、エラー回避まで、実務で使える知識を一通り解説しますよ。
対象バージョン: Excel 2016 / 2019 / 2021 / Microsoft 365(Windows・Mac共通)。Excel for the web・Googleスプレッドシートでも同じ構文で使えます。
FIND関数とSEARCH関数の違い:どちらを使うべきか
FIND関数の説明に入る前に、ほぼ同じ機能を持つ SEARCH関数 との違いを先に片付けてしまいましょう。 ここを最初に整理しておくと、以降の解説で「なぜFINDを選ぶのか」が腹落ちしますよ。
両者の違いはシンプルで、ポイントは2つだけです。 1つ目は 大文字小文字を区別するか、2つ目は ワイルドカードが使えるか です。
| 観点 | FIND関数 | SEARCH関数 |
|---|---|---|
| 大文字・小文字の区別 | 区別する(厳密) | 区別しない(柔軟) |
ワイルドカード(? *) | 非対応 | 対応 |
| 主な用途 | 完全一致・厳密な位置検索 | 表記ゆれ対応・あいまい検索 |
| エラー条件 | 見つからない等で #VALUE! | 見つからない等で #VALUE! |
| 構文 | =FIND(検索文字, 対象, [開始位置]) | =SEARCH(検索文字, 対象, [開始位置]) |
使い分けは次のように覚えておけばOKです。 「データが厳密に揃っているならFIND、表記ゆれがあるならSEARCH」です。 商品コードやメールアドレスはFIND、ユーザーが自由に入力した文章内の検索はSEARCHが向いています。
SEARCH関数を詳しく知りたい方は、SEARCH関数の使い方記事 も合わせて読んでみてくださいね。
FIND関数の基本構文と引数
書式
FIND関数の構文は次のとおりです。
=FIND(find_text, within_text, [start_num])
日本語で書き直すとこうなります。
=FIND(検索する文字, 対象の文字列, [開始位置])
引数は3つあり、最後の開始位置だけ省略可能です。 それぞれの役割を表で確認しましょう。
| 引数 | 必須/省略可 | 説明 | 指定例 |
|---|---|---|---|
| find_text(検索する文字) | 必須 | 探したい文字列。1文字でも複数文字でも可 | "-", "@", "abc" |
| within_text(対象の文字列) | 必須 | 検索対象のセルまたは文字列 | A1, "PRD-001-BK" |
| start_num(開始位置) | 省略可 | 検索を始める文字位置。省略時は1 | 5 → 5文字目から検索 |
戻り値は「1から数えた文字位置」
FIND関数が返すのは、検索文字が対象の中で最初にヒットした位置 を1始まりの整数で表した値です。 たとえば「PRD-001-BK」の「-」を検索すると、1つ目のハイフンは4文字目にあるので4が返ります。
=FIND("-", "PRD-001-BK")
→ 結果: 4
大文字と小文字は別物として扱う
FINDの最大の特徴は 大文字と小文字を厳密に区別する ことです。 「A」と「a」は別の文字として扱われるので、表記ゆれがあるデータだと意図通りにヒットしません。
=FIND("excel", "I love Excel")
→ 結果: #VALUE!("excel"(小文字)は見つからない)
=FIND("Excel", "I love Excel")
→ 結果: 8("Excel" は8文字目にある)
この挙動が「厳密でありがたい」と感じるか「面倒」と感じるかで、FINDとSEARCHの使い分けが決まります。
#VALUE!エラーが出る条件
FIND関数でエラーが出るのは、主に次の2パターンです。 どちらもあとのIFERRORセクションで回避方法を紹介しますよ。
- 検索文字が対象に含まれていない(例:
=FIND("z", "abc")→ 「z」は「abc」にない) - start_numが0以下、またはwithin_textの文字数を超えている(例:
=FIND("a", "abc", 10)→ 対象は3文字しかない)
ワイルドカードは使えない
FIND関数では ?(任意の1文字)や *(任意の文字列)といったワイルドカードは使えません。 あいまい検索をしたい場合はSEARCH関数を使うか、SUBSTITUTE関数 で前処理してからFINDに渡す、といった工夫が必要です。
FIND関数の基本的な使い方
特定の文字が何文字目にあるかを調べる
まずは一番シンプルな使い方からです。 セルA2に「PRD-001-BK」という商品コードが入っているとして、最初のハイフンが何文字目にあるかを調べてみましょう。
=FIND("-", A2)
→ 結果: 4
「PRD」の3文字のあとにハイフンが来るので、4が返りますね。
開始位置を指定して途中から検索する
FIND関数の3つ目の引数 start_num を使うと、検索開始位置をずらせます。 たとえば「PRD-001-BK」の5文字目以降から「-」を探すとこうなります。
=FIND("-", A2, 5)
→ 結果: 8
1つ目のハイフン(4文字目)は無視されて、2つ目のハイフン(8文字目)が見つかりましたね。 この「開始位置の指定」は、後述の「2つ目の同一文字を探す」テクニックで大活躍します。
FIND + LEFT/MID/RIGHT 組み合わせパターン3選
ここからが本記事のメインテーマです。 FIND関数は単独で使うことはほぼなく、LEFT・MID・RIGHTの切り出し位置を自動算出するパーツとして組み合わせるのが定番です。 実務でよく使う3パターンを具体的に見ていきましょう。
パターン①:商品コードのハイフン位置から型番を抽出する
商品コード「PRD-001-BK」から真ん中の型番「001」だけを取り出したいケースを考えます。 型番の前後はハイフンで挟まれているので、「1つ目のハイフンの次の文字」から「2つ目のハイフンの1つ前」までを切り出せばOKですね。
これを数式にするとこうなります。
=MID(A2, FIND("-", A2)+1, FIND("-", A2, FIND("-", A2)+1)-FIND("-", A2)-1)
一見複雑ですが、パーツに分解すれば怖くありません。
FIND("-", A2)→ 1つ目のハイフン位置(4)FIND("-", A2, FIND("-", A2)+1)→ 2つ目のハイフン位置(8)- 開始位置:
FIND("-", A2)+1= 5 - 文字数:
8 - 4 - 1= 3
結果として「001」が取り出せます。 MID関数の仕様を詳しく知りたい方は MID関数の使い方記事 も参考にしてくださいね。
パターン②:メールアドレスの「@」位置でID・ドメインを分離する
次はメールアドレスを「ユーザーID」と「ドメイン」に分離するパターンです。 「taro@example.com」のように @ が1つだけあるフォーマットなので、FINDで @ の位置を取れば左右に分解できます。
セルA2に taro@example.com が入っているとして、ユーザーID側を取り出す式はこうです。
=LEFT(A2, FIND("@", A2)-1)
→ 結果: taro
「@の位置 – 1」の文字数だけ左から取り出せば、@ の直前までが切り出せますね。 LEFT関数の詳細は LEFT関数の使い方記事 で解説しています。
続けてドメイン側です。 「全体の長さ – @の位置」の文字数を右から取ればOKで、可変長のドメインにも対応できます。
=RIGHT(A2, LEN(A2)-FIND("@", A2))
→ 結果: example.com
LEN(A2) で全体の文字数(16)を取り、そこから @ の位置(5)を引いた11文字をRIGHTで切り出しています。 RIGHT関数は RIGHT関数の使い方記事、LEN関数は LEN関数の使い方記事 に詳しい解説があります。
パターン③:全角カッコ「(」「)」の両位置からカッコ内を取り出す
3つ目は「商品名(送料込み)」から、カッコ内の「送料込み」だけを抜き出すパターンです。 FIND関数を2回使って「(」と「)」の位置を取得し、MIDで挟まれた部分を切り出します。
セルA2に 商品名(送料込み) が入っているとすると、式はこうなります。
=MID(A2, FIND("(", A2)+1, FIND(")", A2)-FIND("(", A2)-1)
→ 結果: 送料込み
ロジックはパターン①と同じで、「(の次の位置」から「)の1つ前までの文字数」を取っているだけです。 全角カッコと半角カッコが混在するデータでは、SUBSTITUTEで統一してから処理すると安定しますよ。
2つ目の同一文字を探す:開始位置の指定テクニック
商品コード「PRD-001-BK」のように同じ文字が複数含まれるとき、「2つ目のハイフンだけを狙いたい」場面がよくあります。 ここで活躍するのが、FIND関数の3つ目の引数 start_num です。
2つ目のハイフン位置を取得する基本形
考え方はシンプルで、「1つ目のハイフン位置の次の文字から検索を再開する」というだけです。
=FIND("-", A2, FIND("-", A2)+1)
→ 結果: 8
内側の FIND("-", A2) で1つ目のハイフン位置(4)を取り、+1 した5文字目から再検索します。 そうすると2つ目のハイフン位置(8)が返ります。 この「FINDのネスト」は商品コード解析で頻出するパターンなので、覚えておくと武器になりますよ。
FIND+LENで可変長文字列に対応する
ハイフン区切りのコードで、各パートの長さが可変になることもあります。 たとえば「PRD-12-BK」「PRD-0001-WH」のように型番の桁数がバラバラなケースです。
末尾の「BK」「WH」を取り出すには「2つ目のハイフンの次から末尾まで」を切り出せばよく、その文字数は LEN - 2つ目のハイフン位置 で計算できます。
=RIGHT(A2, LEN(A2)-FIND("-", A2, FIND("-", A2)+1))
セルA2が「PRD-0001-WH」なら、LENは11、2つ目のハイフン位置は9、差分は2なのでRIGHTで末尾2文字「WH」が取れます。 可変長データにFINDとLENを組み合わせるこの型は、応用範囲がとても広いですよ。
IFERROR + FIND でエラーを回避する
ここまで紹介した式は「必ず検索文字が含まれている」前提でしたが、実務データにはハイフンなしのコードやメールアドレス不備の行が混ざることがよくあります。 そのままFIND関数を通すと #VALUE! エラーが返り、以降の計算がすべて崩れてしまいます。 これを防ぐのが IFERROR関数 との組み合わせです。
#VALUE!エラーの発生原因をおさらい
FIND関数でエラーになる代表的な原因は次の2つです。
- 検索文字がwithin_textに含まれていない(例: ハイフンなしの商品コード)
- start_numが0以下、またはwithin_textの文字数より大きい
どちらも「たまに混ざるイレギュラーなデータ」で発生しがちです。 集計シート全体が #VALUE! で埋め尽くされるのはよくある事故なので、IFERRORでの保険は必ず入れておきたいところです。
「0返し」と「空文字返し」の使い分け
IFERROR+FINDの書き方には、大きく分けて2パターンあります。
パターン1:0を返す
=IFERROR(FIND("-", A2), 0)
エラー時に0を返す書き方です。 返り値を後続のMIDやLEFTに渡す場合や、ヒット数をカウントしたい場合に向いています。 0が返ったセルだけ別処理する、といった分岐にも使えますよ。
パターン2:空文字を返す
=IFERROR(FIND("-", A2), "")
エラー時に空文字を返す書き方です。 一覧表示で「該当なしの行は空欄にしたい」ときに向いています。 ただし空文字は数値ではないので、後続の数式に直接つなぐとかえってエラーになることがあります。注意してください。
使い分けの目安
- 後続の数式で計算に使う → 0返し(数値として扱える)
- 表示用・目視確認用 → 空文字返し(0だと紛らわしい場面で有効)
- LEFT/MID/RIGHTに直接つなぐ → IFERRORを 外側に巻く 書き方が安全
たとえばメールアドレスのID抽出なら、IFERRORを外側に巻く書き方が実用的です。
=IFERROR(LEFT(A2, FIND("@", A2)-1), "")
こう書いておけば、「@が含まれない不正なメールアドレス」の行は空欄になり、集計が止まりません。
まとめ:FIND関数の活用ポイント
FIND関数の使いどころを最後に整理しますね。
- 基本:
=FIND(検索文字, 対象, [開始位置])で1始まりの位置を返す。大文字小文字は 区別する、ワイルドカードは 非対応 - SEARCH関数との使い分け: 厳密なデータ(コード・メールアドレス)はFIND、表記ゆれやあいまい検索はSEARCH
- LEFT/MID/RIGHTとの組み合わせが本領: 商品コードの型番抽出・メールアドレス分離・カッコ内抽出の3パターンはテンプレとして覚えると実務で即戦力
- 開始位置の指定 は「2つ目の同一文字」を狙うときの必須テクニック。FINDをネストするとシンプルに書ける
- FIND+LEN の組み合わせで可変長文字列にも対応できる
- IFERRORでの保険 を忘れずに。0返しは数値計算向き、空文字返しは表示向き。LEFT/MID/RIGHTと組み合わせるときはIFERRORを外側に巻くのが安全
FIND関数は単独で眺めるとシンプルですが、LEFT・MID・RIGHT・LEN・IFERROR・SUBSTITUTEと組み合わせることで、実務データをきれいにさばけるようになります。 文字列操作の全体像を俯瞰したい方は、Excelの文字列関数まとめ もぜひ読んでみてくださいね。 1つずつ手を動かして試せば、「コードの分解は手作業でやる」状態から必ず卒業できますよ。
