SEARCH関数の使い方|文字列の位置を調べる方法とFIND関数との違い

「商品名に『ペン』が含まれているか」「その文字が何文字目にあるか」を調べたいときに使うのがSEARCH関数です。結論から言うと、SEARCH関数は=SEARCH(検索文字列,対象)で、対象の文字列の中で検索文字列が最初に現れる位置(何文字目か)を返します。見つからないときは#VALUE!エラーになるため、ISNUMBER関数と組み合わせて「含むかどうか」の判定によく使われます。

目次

SEARCH関数の基本構文

=SEARCH(検索文字列,対象,[開始位置])

  • 検索文字列: 探したい文字(例: “ペン”)
  • 対象: 探される側の文字列やセル
  • 開始位置: 何文字目から探し始めるか。省略すると1文字目から探します。途中から探した場合も、結果は先頭から数えた位置で返ります

SEARCH関数で文字の位置を求める例

次のような商品名の表(A1:A5)で考えます。

A(商品名) B(SEARCHの結果)
2 ボールペン(黒) 4
3 シャープペン 5
4 ボールペン(赤) 4
5 消しゴム #VALUE!

A列=商品名という対応で、B2に=SEARCH("ペン",A2)と入れて下にコピーした結果です。「ボールペン」は4文字目から「ペン」が始まるので4、「シャープペン」は5、「ペン」を含まない「消しゴム」は#VALUE!になります。

SEARCH関数とISNUMBER関数で「含むかどうか」を判定する

SEARCHは見つかれば数値、見つからなければエラーを返すので、結果が数値かどうかをISNUMBER関数で調べると「含む/含まない」をTRUE/FALSEで判定できます。A列=商品名です。

=ISNUMBER(SEARCH("ボールペン",A2))

結果は2行目と4行目がTRUE、3行目と5行目がFALSEです。IF関数と組み合わせて=IF(ISNUMBER(SEARCH("ボールペン",A2)),"○","")とすれば、含む行に「○」を付けられます(IF関数はIF関数の基本的な使い方|条件で処理を分ける書き方参照)。この組み合わせは、ワイルドカードが使えないSUMPRODUCTで部分一致の条件を作るときにも使います(SUMPRODUCTでAND/OR条件の集計をする方法参照)。

なお、「含む行が何件あるか」だけを知りたいなら、=COUNTIF(A2:A5,"*ボールペン*")のほうが簡単です(結果は2。COUNTIF関数の基本的な使い方|条件に合うセルの個数を数える方法参照)。

SEARCH関数とFIND関数の違い

比べるポイント SEARCH関数 FIND関数
英字の大文字・小文字 区別しない 区別する
ワイルドカード(? *) 使える 使えない
見つからないとき #VALUE! #VALUE!

たとえば=SEARCH("pc","NotePC")は大文字小文字を区別しないので5を返しますが、=FIND("pc","NotePC")は#VALUE!になります。大文字と小文字を区別して探したいときはFIND関数を使います。FIND関数を使った例はエクセル関数でシート名を取得する関数 初心者必見マクロ不使用やアンケートの複数回答(カンマ区切り)をCOUNTIFで集計する方法で紹介しています。

SEARCH関数のよくある注意点

  • 見つからないと#VALUE!エラー: エラーのまま表に残したくない場合は、上記のISNUMBERで判定するか、IFERRORで表示を置き換えます。#VALUE!エラー全般の見分け方は#VALUE!エラーの原因と直し方を参照してください。
  • 「?」や「*」そのものを探すときは「~」を付ける: SEARCHでは?は任意の1文字、*は任意の文字列として扱われます。記号そのものを探したいときは"~?"のように直前にチルダを付けます。
  • 最初に見つかった位置しか返さない: 同じ文字が複数回出てきても、返るのは最初の位置です。2つ目以降を探すときは開始位置を指定します。

SEARCH関数が登場する記事

SEARCH関数の使い方まとめ

SEARCH関数は=SEARCH(検索文字列,対象)で文字の位置を返し、見つからなければ#VALUE!になります。ISNUMBERと組み合わせると「含むかどうか」の判定に使えます。大文字小文字を区別したいときはFIND関数を使いましょう。条件付きの集計については、サイトの人気記事エクセルのsumifs関数でOR条件の集計をする方法もあわせて参考にしてください。

目次