両方とも Excelの関数で、あるテキスト文字列内の文字または別のテキスト文字列を検索します。
似ているので、つい間違えたり混同したりしてしまいます。
その違いについて見てみます。
「FIND」関数の書式は、次の通りです:
FIND(検索文字列, 対象, [開始位置])
第3引数の「開始位置」はオプションで、省略すると、「1」を指定したと見なされます。
検索を開始する位置を指定します。
簡単な例ですが、下図のように [対象]文字列の中で検索文字列「都」が先頭から何文字めで見つかるか調べます。(下図)
FIND関数は、このように漢字でも半角英数文字でも、つまり 1バイト文字でも 2バイト文字でも常に文字数で数えます。
これを「FINDB」関数に置き換えると、この例では「5」と返されます。
FINDB関数はバイト単位で数えますので、漢字などは 1文字で「2」と数えます。
「SEARCH」関数の書式は、次の通りです:
SEARCH(検索文字列, 対象, [開始位置])
上記「FIND」関数の引数と同じですね。
これも同じ例で試してみると、同じく「3」と返されます。(下図)
そして、バイト単位で検索する「SEARCHB」関数とすれば、こちらも同じく「5」と返されます。
ここまでは「FIND」関数と「SEARCH」関数の違いはありません。
それでは違いはどこでしょう。
違いは、以下のようになります:
大文字と小文字の区別 | ワイルドカードの使用可否 | |
---|---|---|
FIND関数 | 区別する | 使用できない |
SEARCH関数 | 区別しない | 使用できる |
(1) 大文字と小文字の区別
「FIND」関数は、大文字と小文字を区別して検索しますので、下図の例のように小文字の「o」は先頭から「5」文字め、大文字の「O」は先頭から「9」文字めに見つかります。
「FINDB」関数としても同じです。
これを「SEARCH」関数に置き換えると、小文字の「o」で検索しても、大文字の「O」で検索しても、いずれも「5」文字めと返されます。(下図)
(2) ワイルドカードの使用
「FIND」関数は、ワイルドカード(「*」や「?」)は使用できません。
「SEARCH」関数は、ワイルドカードを使用できます。
ワイルドカード文字「?」は任意の 1文字を表し、「*」は 0文字以上の任意の文字列を表します。
下図の例は、電話番号の中で「-」(ハイフン)と「-」の間に4文字が挟まれているパターンを見つけるものです。
「FIND」関数ではワイルドカードが使えないので「#VALUE!」エラーとなります。
「SEARCH」関数はワイルドカードを使えるので、このパターンに合致する文字列を見つけ「4」と返しています。
「=SEARCH("*0",A2)」とすれば、先頭に「0」があってもこのパターンに合致するので「1」と返します。
ちなみに、[対象]文字列の中に「?」や「*」があって、それの位置を求めたいときは、「~」(チルダ)を前置します。
例えば、A2セルが「090-1234-?678」であって「?」の位置は「=SEARCH("~?",A2)」で求められ「10」と返されます。
なお、Microsoftのサポートページ「FIND 関数、FINDB 関数」、「SEARCH 関数、SEARCHB 関数」もご参照ください。