「商品名に『ペン』が含まれているか」「その文字が何文字目にあるか」を調べたいときに使うのが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条件の集計をする方法もあわせて参考にしてください。






