まずは結論:SEARCHとFINDの違いは「大文字小文字」と「ワイルドカード」
Excelで文字列の位置を調べたいときに使う代表的な関数が、SEARCH関数とFIND関数です。どちらも「指定した文字が、文字列の何文字目にあるか」を返してくれる関数ですが、実務で使うときには明確な違いがあります。
結論から言うと、SEARCHとFINDの大きな違いは次の2つです。
- SEARCH関数:大文字・小文字を区別しない
- FIND関数:大文字・小文字を区別する
- SEARCH関数:ワイルドカードが使える
- FIND関数:ワイルドカードが使えない
たとえば、セルに「Excel」と入力されている場合を考えてみましょう。SEARCH関数で「excel」を探すと、大文字と小文字を区別しないため、正しく「1文字目」と判定できます。一方、FIND関数で「excel」を探すと、「E」と「e」は別の文字として扱われるため、見つからずエラーになります。
つまり、表記ゆれを気にせず検索したいならSEARCH、大文字・小文字まで厳密に判定したいならFINDと考えるとわかりやすいです。
さらに、SEARCH関数ではワイルドカードを使えます。ワイルドカードとは、「任意の文字」を表す記号のことです。Excelでは主に、「?」は任意の1文字、「*」は任意の複数文字を意味します。たとえば「A*」のように指定すれば、「A」から始まる文字列を幅広く検索できます。
一方、FIND関数ではこのワイルドカードが使えません。「*」や「?」を指定しても、特別な意味を持つ記号としてではなく、普通の文字として扱われます。そのため、あいまい検索には向いていません。
仕事でExcelを使っていると、顧客リスト、商品コード、メールアドレス、アンケート回答など、文字列データを扱う場面はかなり多いです。その中で「この文字が含まれているか」「特定の記号がどこにあるか」を調べたいとき、SEARCHとFINDの違いを理解しているかどうかで作業効率が変わります。
ざっくり使い分けるなら、普段の業務ではまずSEARCH関数を使う場面が多いです。大文字・小文字を気にしなくてよく、ワイルドカードも使えるため、柔軟に検索できます。逆に、商品コードやIDのように「A001」と「a001」を別物として扱いたい場合は、FIND関数が適しています。
このように、SEARCHとFINDは似ていますが、得意な場面が違います。まずは「SEARCHはゆるく探す」「FINDは厳密に探す」と覚えておくと、実務でも迷わず使い分けられるようになります。
基本の使い方:SEARCH関数・FIND関数の構文をサクッと確認
ここでは、SEARCH関数とFIND関数の基本的な書き方を確認していきます。どちらの関数も構文はほとんど同じなので、一度覚えてしまえばセットで理解できます。
まず、SEARCH関数の構文は次のとおりです。
=SEARCH(検索したい文字列, 検索対象の文字列, [開始位置])
FIND関数の構文も、基本的には同じです。
=FIND(検索したい文字列, 検索対象の文字列, [開始位置])
それぞれの引数の意味を整理すると、次のようになります。
- 検索したい文字列:探したい文字や単語を指定する
- 検索対象の文字列:どの文字列の中から探すかを指定する
- 開始位置:何文字目から検索を始めるかを指定する省略可能な項目
たとえば、A1セルに「sales@example.com」と入力されているとします。この中から「@」が何文字目にあるかを調べたい場合は、次のように入力します。
=SEARCH("@", A1)
結果は「6」になります。「sales」の5文字のあとに「@」があるため、@は6文字目というわけです。同じことはFIND関数でもできます。
=FIND("@", A1)
この例では、大文字・小文字やワイルドカードが関係しないため、SEARCHでもFINDでも同じ結果になります。
次に、3つ目の引数である「開始位置」について見てみましょう。開始位置を指定すると、文字列の途中から検索を始められます。たとえば、A1セルに「abc-abc-001」と入力されている場合、2つ目の「abc」を探したいときに便利です。
=SEARCH("abc", A1, 2)
このように指定すると、1文字目ではなく2文字目以降から「abc」を探します。そのため、最初の「abc」は無視され、5文字目にある2つ目の「abc」が見つかります。
開始位置は省略できます。省略した場合は、自動的に1文字目から検索されます。普段の業務では、まずは開始位置を省略して使うケースが多いでしょう。
注意点として、検索したい文字列が見つからない場合、SEARCH関数もFIND関数も#VALUE!エラーを返します。たとえば、A1セルに「Tokyo」と入っているのに「大阪」を探すような式を書くと、該当する文字がないためエラーになります。
=SEARCH("大阪", A1)
このエラーをそのままにしておくと、後続の計算や一覧表の見た目に影響することがあります。実務では、必要に応じてIFERROR関数と組み合わせると扱いやすくなります。
=IFERROR(SEARCH("@", A1), "見つかりません")
このように書けば、「@」が見つかった場合は位置を返し、見つからなかった場合は「見つかりません」と表示できます。
つまり、SEARCH関数とFIND関数の基本は、「何を」「どこから」「どの文字列の中で」探すかを指定するだけです。構文自体はシンプルなので、まずはメールアドレスの「@」や商品コードの「-」など、わかりやすい記号を探すところから試してみると理解しやすいでしょう。
実例で比較:同じ文字列を検索すると結果はどう変わる?
ここからは、実際の文字列を使ってSEARCH関数とFIND関数の結果を比較してみましょう。構文だけを見るとほぼ同じですが、検索する内容によって結果が変わります。
まずは、大文字・小文字の違いがあるケースです。A1セルに次の文字列が入っているとします。
Excel Report
この中から、小文字の「excel」を探す場合を考えます。
=SEARCH("excel", A1)
SEARCH関数では、大文字と小文字を区別しないため、結果は1になります。「Excel」の先頭にある「E」が大文字でも、「excel」と同じものとして扱われるからです。
一方、FIND関数で同じように検索するとどうなるでしょうか。
=FIND("excel", A1)
この場合、結果は#VALUE!エラーになります。FIND関数は大文字・小文字を区別するため、「Excel」と「excel」は別の文字列と判断されます。
| 関数 | 数式 | 結果 |
|---|---|---|
| SEARCH | =SEARCH(“excel”, A1) | 1 |
| FIND | =FIND(“excel”, A1) | #VALUE! |
次に、ワイルドカードを使った例を見てみましょう。A1セルに「AB-12345」と入力されているとします。この中から「AB」で始まり、その後に何らかの文字が続くパターンを探したい場合、SEARCH関数では次のように書けます。
=SEARCH("AB*", A1)
SEARCH関数では「*」が任意の複数文字を表すため、結果は1になります。「AB-12345」は「AB」から始まっているため、条件に一致するというわけです。
では、FIND関数で同じ式を書いた場合はどうでしょうか。
=FIND("AB*", A1)
FIND関数ではワイルドカードが使えません。そのため、「AB*」という文字列そのものを探しにいきます。A1セルには「AB*」という文字は入っていないので、結果は#VALUE!エラーになります。
もう1つ、実務でよくあるメールアドレスの例も見てみましょう。A1セルに「Taro.Yamada@example.com」と入っている場合、「@」の位置を調べるだけなら、SEARCHでもFINDでも結果は同じです。
=SEARCH("@", A1)
=FIND("@", A1)
どちらも「@」をそのまま探すだけなので、同じ位置を返します。つまり、記号や完全一致の文字を探すだけなら、SEARCHとFINDの差はほとんど出ません。
違いが出るのは、「大文字・小文字をどう扱うか」「あいまいな条件で探したいか」という場面です。表記ゆれを許容したい顧客名やメールアドレスの確認ならSEARCH、商品コードやIDのように1文字でも違えば別物として扱いたいデータならFINDが向いています。
このように、同じ文字列を検索しても、条件によって結果は大きく変わります。単に「文字を探す関数」と覚えるのではなく、SEARCHは柔軟、FINDは厳密というイメージで押さえておくと、実務でも判断しやすくなります。
仕事で使える活用例:メールアドレス・商品コード・氏名データの抽出
SEARCH関数とFIND関数は、「文字の位置を調べる」だけで終わりではありません。実務では、LEFT関数・RIGHT関数・MID関数・LEN関数などと組み合わせて、必要な文字だけを取り出す場面でよく使います。
まずは、メールアドレスからユーザー名とドメインを分ける例です。A1セルに次のメールアドレスが入っているとします。
tanaka@example.com
「@」より前のユーザー名だけを取り出す場合は、次のように書けます。
=LEFT(A1, SEARCH("@", A1)-1)
SEARCH(“@”, A1)で「@」の位置を調べ、そこから1を引くことで、「@」より前の文字数を指定しています。結果はtanakaになります。
反対に、「@」より後ろのドメインだけを取り出したい場合は、RIGHT関数とLEN関数を組み合わせます。
=RIGHT(A1, LEN(A1)-SEARCH("@", A1))
この式では、文字列全体の長さから「@」の位置を引くことで、右側にある文字数を計算しています。結果はexample.comです。
次に、商品コードの処理です。たとえばA1セルに「PRD-2024-001」のようなコードが入っているとします。このうち、先頭のカテゴリ部分「PRD」だけを取り出したい場合は、ハイフンの位置を基準にします。
=LEFT(A1, FIND("-", A1)-1)
商品コードでは、大文字・小文字の違いを厳密に扱いたいケースが多いため、ここではFIND関数が向いています。ハイフンの位置を探し、その直前までをLEFT関数で取り出すイメージです。
また、2つ目のハイフン以降にある番号「001」を取り出したい場合は、開始位置を指定して2つ目のハイフンを探します。
=RIGHT(A1, LEN(A1)-FIND("-", A1, FIND("-", A1)+1))
少し長く見えますが、考え方はシンプルです。最初のハイフンの次から、もう一度ハイフンを探し、その後ろの文字を取り出しています。
最後に、氏名データの分割です。A1セルに「山田 太郎」のように、姓と名の間に半角スペースが入っている場合、姓だけを取り出すには次の式を使います。
=LEFT(A1, SEARCH(" ", A1)-1)
名だけを取り出す場合は、スペースより後ろを取得します。
=RIGHT(A1, LEN(A1)-SEARCH(" ", A1))
氏名データでは、全角スペースと半角スペースが混在していることもあります。その場合は、事前にSUBSTITUTE関数で全角スペースを半角スペースに統一しておくと、より安定して処理できます。
=LEFT(SUBSTITUTE(A1," "," "), SEARCH(" ", SUBSTITUTE(A1," "," "))-1)
このように、SEARCHやFINDは単体で使うよりも、他の文字列関数と組み合わせることで実務での便利さが一気に増します。メールアドレス、商品コード、氏名のような「区切り文字があるデータ」は、特に活用しやすいパターンです。
迷ったときの使い分け:SEARCHを使う場面・FINDを使う場面
ここまで見てきたように、SEARCH関数とFIND関数はかなり似ています。だからこそ、実務では「結局どっちを使えばいいの?」と迷いやすいポイントです。判断に迷ったときは、まず検索条件をゆるくしたいのか、厳密にしたいのかで考えると整理しやすくなります。
基本的には、次のように使い分けるのがおすすめです。
| 使いたい場面 | おすすめ関数 | 理由 |
|---|---|---|
| 大文字・小文字を気にせず探したい | SEARCH | Excel、excel、EXCELを同じように扱える |
| 表記ゆれがあるデータを検索したい | SEARCH | 柔軟に文字列を見つけやすい |
| ワイルドカードを使いたい | SEARCH | 「*」や「?」を使ったあいまい検索ができる |
| 大文字・小文字を区別したい | FIND | A001とa001を別物として判定できる |
| 商品コードやIDを厳密に扱いたい | FIND | 1文字違いを見逃しにくい |
日常業務でよく使うのは、どちらかというとSEARCH関数です。たとえば、顧客名、メールアドレス、アンケート回答、備考欄のコメントなどは、入力する人によって表記が微妙に変わることがあります。このようなデータでは、大文字・小文字を厳密に判定するよりも、「対象の文字が含まれているか」をざっくり確認できるほうが便利です。
一方で、FIND関数を使うべき場面もあります。代表的なのは、商品コード、社員ID、管理番号、型番などです。これらは「A」と「a」で意味が変わる可能性があります。もし大文字・小文字を区別せずに処理してしまうと、本来は別のデータを同じものとして扱ってしまうリスクがあります。
つまり、SEARCHは人が入力した自然な文字列に向いていて、FINDはルールに沿って作られたコードや番号に向いている、と考えるとわかりやすいです。
迷ったときの判断基準は、次の3つです。
- 大文字・小文字を区別する必要があるか?
- ワイルドカードを使いたいか?
- 検索対象は文章に近いデータか、コードに近いデータか?
この3つを確認すれば、ほとんどのケースで使うべき関数を選べます。特にこだわりがない場合は、まずSEARCH関数を使い、厳密な判定が必要だとわかった時点でFIND関数に切り替える、という考え方でも問題ありません。
最後に覚えておきたいのは、SEARCHとFINDはどちらが優れているという関係ではなく、目的によって使い分ける関数だということです。「SEARCHは柔軟に探す」「FINDは正確に探す」。このイメージを持っておけば、Excelで文字列を扱う作業がかなりスムーズになります。


コメント