FIND関数とSEARCH関数の2つの違い

FIND関数とSEARCH関数の2つの違い

前回・前々回と任意の文字列が対象データの何文字目にあるかカウントするための方法としてFIND関数とSEARCH関数をそれぞれ解説してきました。

FIND関数で任意の文字列が対象データの何文字目にあるかカウントする方法 | Excelを制する者は人生を制す ~No Excel No Life~

SEARCH関数で任意の文字が対象データの何文字目にあるかカウントする方法 | Excelを制する者は人生を制す ~No Excel No Life~

しかし、かなり似ている関数同士のため、先の解説では相違点まで説明しきれていませんでした。

今回はFIND関数とSEARCH関数の違いについて解説していきます。

Excelステップ講座

FIND関数とSEARCH関数の2つの違い

大きく2つの違いがあります。

  • 大文字と小文字が区別されるか
  • 検索文字列にワイルドカード(「*」・「?」)が使用できるか

一覧にまとめると、それぞれの関数では下表の通りです。

FIND関数とSEARCH関数の違い①

  • 大文字と小文字が区別されるか:FIND関数はされる、SEARCH関数はされない
  • 検索文字列にワイルドカードが使用できるか:FIND関数は不可、SEARCH関数は可

【相違点①】大文字と小文字が区別されるか

まず、相違点の1つ目から確認していきましょう。

たとえば、”I have a PEN”という文字列の中で”E”が何文字目かをFIND関数・SEARCH関数の双方で下図の通り確認してみます。

FIND関数とSEARCH関数の違い②

すると、FIND関数では11文字目、SEARCH関数では6文字目と結果に違いが生じました。

ちなみにそれぞれの数式はこんな感じです。↓

FIND関数とSEARCH関数の違い③

なお、数式をワークシート上に表示するための方法は下記記事をご参照ください。

Excelで数式をワークシートに表示するショートカットキー( [Ctrl]+[Shift]+@) | Excelを制する者は人生を制す ~No Excel No Life~

結果が違う原因は、FIND関数は”E”と”e”は別の文字として扱う一方、SEARCH関数は”E”と”e”は同じ文字として扱うためです。

下表のようにまとめるとわかりやすいです。

FIND関数とSEARCH関数の違い④

FIND関数では大文字の”E”のみ検索するため11文字目、SEARCH関数は小文字の”e”も”E”と同じだと認識して検索するため6文字目がそれぞれ返り値となったということですね。

【相違点②】検索文字列にワイルドカード(「*」・「?」)が使用できるか

2つ目の相違点です。

SEARCH関数のみワイルドカードが使用できます。

なお、ワイルドカードについては下記記事をご参照ください。

COUNTIF関数で覚えておくと捗る検索テクニック | Excelを制する者は人生を制す ~No Excel No Life~

使いどころが難しいですが、たとえば下図のように”?E”を検索文字列とすると、”E”の1文字前が返ります。

FIND関数とSEARCH関数の違い⑤

SEARCH関数は大文字・小文字を同じくとらえるため、6文字目の”e”の前にある”v”がワイルドカードにHITした文字列となります。

よって、返り値は”5″になります。

ちなみに、FIND関数は「#VALUE!」のエラーになります。

使い分けのポイント

基本的には対象の文字列がどういうものか?で判断するのが良いでしょう。

日本語・数字のみ

検索対象がすべて日本語・数字であれば、FIND関数・SEARCH関数のどちらでも構いません。

強いていえば、入力工数を減らしたい人(場合)はFIND関数、ワイルドカードを使用したい人(場合)はSEARCH関数といったところですね。

大文字・小文字混在の英字を含み、かつ検索文字列も英字

検索対象が大文字・小文字混在の英字を含み、かつ検索文字列が英字の場合は注意が必要です。

その場合、返したい結果が英字の大文字・小文字をわけて考える場合はFIND関数、あえていっしょに考えたい場合はSEACH関数といったところですね。

まとめ

そもそもFIND関数とSERACH関数はそれぞれ難易度の高い関数のため、明確に使い分けを強いられるケースは少ないかもしれません。

しかし、ちょくちょく他の文字列関数とセットで使うケースもあると思うので、ちょっとした違いで関数の結果が異なった場合の原因がわからないと作業が止ま可能性もあるので覚えておくとベターですね。

Excel中・上級者向けの記事になりましたが、参考になれば幸いですm(_ _)m