ExcelのFIND関数の使い方をお探しですね。
広告
ExcelのFIND関数とSEARCH関数の違いとは?文字列検索の使い分けを解説
Excelで住所や商品名、メールアドレスなどを扱っていると、「特定の文字が何文字目にあるか知りたい」という場面がよくありますよね。
そんなときに使うのが、FIND関数とSEARCH関数です。
どちらも文字列を検索して位置を教えてくれる便利な関数ですが、実は大事な違いがあります。
それは、**大文字と小文字を区別するかどうか**、そして**ワイルドカードが使えるかどうか**という点です。
この記事では、FIND関数とSEARCH関数の基本的な使い方から、実際の仕事での使い分け方、エラーが出たときの対処法まで、わかりやすく解説していきます。
FIND関数とSEARCH関数って何?|文字の位置を教えてくれる関数
FIND関数とSEARCH関数は、どちらも「指定した文字が、文字列の中で左から何文字目にあるか」を調べる関数です。
例えば、A1セルに「Microsoft Excel」と入力されているとき、「Excel」が何文字目から始まるかを調べると、答えは「11」になります。
この「位置」の情報を使えば、LEFT関数やMID関数、RIGHT関数などと組み合わせて、必要な部分だけを取り出すことができるんです。
基本的な書き方
FIND関数の書き方は、`=FIND(検索文字列, 対象, [開始位置])`です。
SEARCH関数もほぼ同じで、`=SEARCH(検索文字列, 対象, [開始位置])`と書きます。
– **検索文字列**:探したい文字
– **対象**:検索するセルや文字列
– **開始位置**:何文字目から検索を始めるか(省略可能。
省略すると1文字目から検索)
例えば、A2セルに「東京都新宿区西新宿」と入力されていて、「区」の位置を知りたいときは、`=FIND(“区”,A2)`または`=SEARCH(“区”,A2)`と入力します。
どちらを使っても、「区」が最初に出てくる位置が数字で返ってきます。
日本語や数字だけを検索するシンプルなケースでは、FIND関数とSEARCH関数の結果は同じになることが多いです。
だから、違いを意識せずに使っている人も少なくありません。
でも、英語が入っているデータや、あいまいな検索をしたいときには、この2つの違いが結果に大きく影響してきます。
特に商品コードやメールアドレス、英文を含むデータを扱うときは、どちらを選ぶかでエラーが出たり、思わぬ位置が返ってきたりすることがあるんです。
まずは「どちらも文字の位置を教えてくれるけど、検索のルールが違う」ということを覚えておきましょう。
FIND関数とSEARCH関数の違い|大文字・小文字とワイルドカード
大文字と小文字を区別するかどうか
FIND関数とSEARCH関数の一番大きな違いは、**大文字と小文字を区別するかどうか**です。
– **FIND関数**:大文字と小文字を別の文字として扱う
– **SEARCH関数**:大文字と小文字を区別しない
例えば、A1セルに「Microsoft Excel」と入力されているとき、`=FIND(“excel”,A1)`と書くと、「Excel」と「excel」は違う文字列だと判断されます。
見つからなければ`#VALUE!`エラーが出ます。
一方、`=SEARCH(“excel”,A1)`なら、大文字小文字を気にせず検索するので、「Excel」を見つけて位置を教えてくれます。
ワイルドカードが使えるかどうか
もう一つの大きな違いは、**ワイルドカードが使えるかどうか**です。
ワイルドカードとは、任意の文字を表す記号のこと。
Excelでは主に「**\***」と「**?**」が使われます。
– **\***:任意の複数文字(何文字でもOK)
– **?**:任意の1文字
**SEARCH関数ではワイルドカードが使えますが、FIND関数では使えません。
**だから、表記にばらつきがある文字列を広く検索したいときは、SEARCH関数が向いています。
違いを表で整理
| 比較項目 | FIND関数 | SEARCH関数 |
|—|—|—|
| 大文字・小文字の区別 | 区別する | 区別しない |
| ワイルドカード | 使えない | 使える |
| 向いている検索 | 厳密な検索 | あいまいな検索 |
| 見つからない場合 | #VALUE!エラー | #VALUE!エラー |
具体例で理解しよう
例えば、「商品A-001」「商品B-001」「商品C-001」のような文字列から、「商品?-001」(?の部分は何でもいい)を探したいとき。
SEARCH関数なら`=SEARCH(“商品?-001”,A1)`のように、1文字分の違いを許容した検索ができます。
FIND関数では「?」をワイルドカードとして扱えないので、「?」という記号そのものを探すような動きになり、思った通りの検索になりません。
逆に、「ABC」と「abc」を厳密に分けたいときは、SEARCH関数では区別できないので、FIND関数を使う必要があります。
記号そのものを探すときの注意点
SEARCH関数で「\*」や「?」という記号そのものを検索したいときは注意が必要です。
これらはワイルドカードとして扱われるので、記号そのものを探すには前に**チルダ「~」**を付けます。
– アスタリスクそのものを探す:`=SEARCH(“~*”,A1)`
– 疑問符そのものを探す:`=SEARCH(“~?”,A1)`
このルールを知らないと、記号を検索しているつもりなのに、想定外の位置が返ってくることがあるので気をつけましょう。
実務での使い分け|厳密に探すならFIND、柔軟に探すならSEARCH
実際の仕事では、FIND関数とSEARCH関数を「どっちでも同じ」と考えるのではなく、目的に合わせて使い分けるとミスを防げます。
基本的な使い分けの考え方
– **大文字・小文字や記号を厳密に判定したい** → FIND関数
– **表記のばらつきを許容して広く検索したい** → SEARCH関数
特に英語のコードや型番を扱う表では、大文字と小文字の違いが別の商品や別の分類を意味することがあるので、FIND関数のほうが安全です。
厳密な検索が必要な場面(FIND関数向き)
例えば、商品コード「AB-100」と「ab-100」を別物として管理している場合。
SEARCH関数では同じ文字列として扱われてしまいます。
`=SEARCH(“AB”,A1)`を使うと、小文字の「ab」も一致したものとして位置を返すので、判定結果が実際のルールとずれる可能性があります。
正確な照合が必要なコード、ID、略称、英文表記では、`=FIND(“AB”,A1)`のようにFIND関数を使うほうが適しています。
柔軟な検索が便利な場面(SEARCH関数向き)
一方、顧客名簿やアンケート回答、商品名、説明文などの自由入力データでは、SEARCH関数が便利です。
例えば、「Excel」「EXCEL」「excel」のどれで入力されていても同じキーワードとして探したい場合、SEARCH関数なら1つの数式で対応できます。
さらに、ワイルドカードを使えば、「大阪\*支店」のように途中の文字数が変わるデータや、「A?01」のように一部だけが異なるコードも検索できます。
使い分けの目安まとめ
– **大文字・小文字を区別したい、完全一致に近い検索をしたい** → FIND関数
– **大文字・小文字を気にせず、表記のばらつきや一部不明な文字を含めて探したい** → SEARCH関数
– **「\*」や「?」を条件として使いたい** → SEARCH関数
– **記号そのものを探す** → 「~」を付ける
同じ文字が複数回出てくる場合
同じ文字が複数回出てくるときは、開始位置を指定することで2つ目以降の位置を調べられます。
例えば、A1セルに「鹿児島県鹿児島市」と入力されていて、2つ目の「鹿児島」を探したいとき。
`=FIND(“鹿児島”,A1,FIND(“鹿児島”,A1)+1)`のように書きます。
最初の「鹿児島」の位置に1を足した場所から再検索することで、2つ目の出現位置を取得できます。
この考え方はSEARCH関数でも同じように使えます。
文字列抽出への活用とエラー対策|他の関数との組み合わせ技
FIND関数とSEARCH関数は、単独で位置を調べるだけでなく、他の文字列関数と組み合わせることで真価を発揮します。
LEFT・MID・RIGHT関数との組み合わせ
代表的なのが、LEFT関数、MID関数、RIGHT関数、LEN関数との組み合わせです。
メールアドレスからユーザー名を取り出す
メールアドレスから「@」より左側のユーザー名を取り出したいとき:
“`
=LEFT(A1,FIND(“@”,A1)-1)
“`
「@」の位置をFIND関数で調べ、その1文字前までをLEFT関数で取り出します。
メールアドレスからドメイン名を取り出す
「@」より右側のドメイン名を取り出したいとき:
“`
=MID(A1,FIND(“@”,A1)+1,LEN(A1))
“`
FIND関数で「@」の位置を調べ、その次の文字から文字列の最後までをMID関数で取り出します。
取り出す文字数にはLEN関数で全体の文字数を指定しておけば、ドメインの長さが変わっても対応できます。
区切り文字が「-」「/」「×」などの場合も、考え方は同じです。
住所データの処理
住所データでも同じ考え方が使えます。
A1セルに「神奈川県横浜市青葉区」と入力されていて、県名だけを取り出したいとき:
“`
=LEFT(A1,FIND(“県”,A1))
“`
これで「神奈川県」を取得できます。
ただし、都道府県には「東京都」「大阪府」「京都府」「北海道」のように「県」を含まないものもあるので、すべての住所に同じ数式を使うとエラーになる場合があります。
住所処理では、FIND関数だけでなくIF関数やMID関数を組み合わせて、データの規則性に合わせた設計が必要です。
よくあるエラーとその対策
FIND関数とSEARCH関数でよくあるエラーは、検索文字列が見つからないときに表示される`#VALUE!`です。
これは関数が壊れているわけではなく、「指定した文字が対象の文字列内に存在しない」という意味です。
IFERROR関数で見やすくする
検索対象に必ず文字が含まれるとは限らない場合は、IFERROR関数を組み合わせると見やすい表にできます。
“`
=IFERROR(SEARCH(“限定”,A1),”該当なし”)
“`
「限定」が見つかった場合は位置を返し、見つからない場合は「該当なし」と表示できます。
ISNUMBER関数で判定する
文字が含まれているかどうかだけを判定したいときは、ISNUMBER関数との組み合わせも便利です。
“`
=IF(ISNUMBER(SEARCH(“限定”,A1)),”限定品”,”通常品”)
“`
A1セルに「限定」が含まれていれば「限定品」、含まれていなければ「通常品」と分類できます。
SEARCH関数は見つかれば数値を返し、見つからなければエラーを返すので、ISNUMBER関数で「数値かどうか」を判定しているわけです。
文字数とバイト数について
FIND関数とSEARCH関数は基本的に「文字数」で位置を返します。
日本語の全角文字も英数字の半角文字も、通常は1文字として数えられます。
バイト数を基準に位置を扱いたい場合には、FINDB関数やSEARCHB関数が使われることがありますが、現在の一般的なExcel作業では、住所や氏名、商品名の抽出はFIND関数またはSEARCH関数で対応できるケースがほとんどです。
まずは通常の文字数ベースの関数を理解しておけば大丈夫です。
まとめ|使い分けを理解して文字列処理を効率化しよう
ExcelのFIND関数とSEARCH関数の違いは、**「大文字・小文字を区別するか」**と**「ワイルドカードが使えるか」**の2点に集約できます。
– **厳密な検索にはFIND関数**
– **表記のばらつきを含めた柔軟な検索にはSEARCH関数**
これが基本的な使い分けです。
さらに、LEFT関数やMID関数、IFERROR関数と組み合わせれば、文字列の分割、抽出、分類、エラー処理まで幅広く対応できます。
違いを理解して使い分けることで、Excelの文字列処理は大幅に効率化できます。
ぜひこの記事を参考に、実際の業務で活用してみてください。
広告
