Excelで「この文字列の中に特定の文字が何文字目にあるか調べたい」と思ったことはありませんか? しかもデータに大文字・小文字が混在していて、「Excel」も「EXCEL」も同じように見つけたい場面は意外と多いですよね。 手作業で目視チェックするのは、データ量が増えるほど現実的ではありません。
そんなときに使えるのが SEARCH関数 です。 大文字・小文字を区別しないで文字列の位置を返してくれるので、表記ゆれがあるデータでも安心して検索できますよ。 この記事では、SEARCH関数の基本構文からワイルドカード活用、LEFT・MID関数との組み合わせまで、実務に使える知識を順を追って解説します。
対象バージョン: Excel 2016 / 2019 / 2021 / Microsoft 365(Windows・Mac共通)
SEARCH関数とは?大文字小文字を区別しない文字列検索
ExcelのSEARCH関数は、文字列の中から 指定した文字が何文字目にあるか を返す関数です。 読み方は「サーチ」で、英語の「Search(検索する)」が由来になっています。
最大の特徴は 大文字と小文字を区別しない ことです。 たとえば「Excel」というセルに対してSEARCH(“excel”, A1)と書いても、ちゃんと1が返ります。
もう1つの特徴は ワイルドカードが使える ことです。 ?(任意の1文字)や *(任意の文字列)を検索文字に指定でき、あいまい検索ができます。
SEARCH関数とよく比較されるFIND関数との違いを、まず一覧で確認しておきましょう。
| 項目 | SEARCH関数 | FIND関数 |
|---|---|---|
| 大文字・小文字 | 区別しない | 区別する |
| ワイルドカード | 使える(?, *) | 使えない |
| 主な用途 | 表記ゆれ対応・あいまい検索 | 厳密な文字列マッチング |
| 構文 | 同じ | 同じ |
「大文字小文字を気にせず探したい」「パターンであいまい検索したい」ならSEARCH関数、「完全に一致する文字だけ探したい」ならFIND関数、と覚えておけばOKです。
SEARCH関数の書き方(構文・引数)
基本構文
SEARCH関数の構文は次のとおりです。
=SEARCH(検索文字列, 対象, [開始位置])
引数は3つで、開始位置は省略可能です。 それぞれの役割を表で確認しましょう。
| 引数 | 必須/省略可 | 説明 | 指定例 |
|---|---|---|---|
| 検索文字列 | 必須 | 探したい文字列(ワイルドカード使用可) | “abc”, “?-*” |
| 対象 | 必須 | 検索対象のセルまたは文字列 | A1, “Hello World” |
| 開始位置 | 省略可 | 検索を開始する位置(省略時は1) | 5 → 5文字目から検索 |
戻り値は「先頭からの文字位置」
SEARCH関数が返すのは、検索文字列が見つかった先頭位置(1から始まる番号)です。
=SEARCH("World", "Hello World")
→ 結果: 7
「Hello World」の中で「World」は7文字目から始まっているので、7が返ります。
見つからない場合は#VALUE!エラー
検索文字列が対象の中に存在しないと、#VALUE! エラーになります。 エラーを回避するにはIFERROR関数で囲むのが定番です。
=IFERROR(SEARCH("xyz", A1), 0)
見つからないときに0を返す設定にしておけば、後続の処理でエラーが波及しません。
SEARCH関数の基本的な使い方
特定の文字が何番目にあるか調べる
セルA1に「PRD-001-BK」が入っている場合、最初のハイフンの位置を調べてみましょう。
=SEARCH("-", A1)
→ 結果: 4
ハイフンは4文字目にあるので、4が返ります。
大文字小文字を区別しない検索
SEARCH関数の真骨頂です。 セルA1に「Microsoft Excel」が入っている場合を見てみましょう。
=SEARCH("excel", A1)
→ 結果: 11
検索文字列を小文字の「excel」にしていますが、対象の「Excel」(先頭大文字)もちゃんとマッチします。 FIND関数では同じ式が #VALUE! エラーになるので、ここがSEARCH関数の強みですね。
開始位置を指定して2つ目の文字を探す
セルA1に「PRD-001-BK」が入っているとき、2つ目のハイフンの位置を取得する方法です。
=SEARCH("-", A1, SEARCH("-", A1) + 1)
→ 結果: 8
この式を分解すると、次のとおりです。
- 内側のSEARCH(“-“, A1) → 最初のハイフンの位置(4)を取得
- +1 → その次の文字(5文字目)から検索を再開
- 外側のSEARCH → 2つ目のハイフンの位置(8)を取得
開始位置をうまく活用すれば、同じ文字が複数ある場合でもピンポイントで探せますよ。
SEARCH関数の実務活用パターン
ここからは、実務でよく使う活用パターンを紹介します。 SEARCH関数は単体よりも 他の関数と組み合わせて使う ことが多い関数です。
パターン1: LEFT関数と組み合わせて区切り文字の手前を取り出す
「田中 太郎」からスペースの手前「田中」を取り出す定番パターンです。
=LEFT(A1, SEARCH(" ", A1) - 1)
→ 結果: "田中"
この式の流れはこうです。
- SEARCH(” “, A1) → スペースの位置(3)を取得
- – 1 → スペースの1つ手前まで(2文字)
- LEFT関数で先頭から2文字を取り出す
全角スペースにも対応するので、氏名データの分割に重宝しますよ。
パターン2: MID関数と組み合わせて区切り文字の後ろを取り出す
今度は「田中 太郎」から名前「太郎」を取り出すパターンです。
=MID(A1, SEARCH(" ", A1) + 1, LEN(A1))
→ 結果: "太郎"
- SEARCH(” “, A1) → スペースの位置(3)
- +1 → スペースの次の文字(4文字目)から開始
- MID関数で4文字目から末尾まで取り出す(文字数を大きめに指定すれば末尾まで取れます)
LEFT+SEARCHで「前半」、MID+SEARCHで「後半」と覚えておくと便利です。
パターン3: RIGHT関数と組み合わせてファイル拡張子を取り出す
「report_2026.xlsx」からピリオド以降の拡張子を取り出す例です。
=RIGHT(A1, LEN(A1) - SEARCH(".", A1))
→ 結果: "xlsx"
- SEARCH(“.”, A1) → ピリオドの位置(12)
- LEN(A1) – 12 → ピリオドより後ろの文字数(4)
- RIGHT関数で末尾から4文字を取り出す
ファイル名の一覧から拡張子だけ抜き出してフィルタリングしたいときに使えます。
パターン4: ワイルドカードであいまい検索する
SEARCH関数ならではの機能がワイルドカード検索です。 ? は任意の1文字、* は0文字以上の任意の文字列にマッチします。
例1: パターンマッチで商品コードを検索する
「X」で始まり「Z」で終わる3文字のコードがあるかチェックする場合です。
=IFERROR(SEARCH("X?Z", A1), 0)
A1が「AX9Z-100」なら、「X9Z」にマッチして2が返ります。 A1が「ABC-100」なら見つからず0が返ります。
例2: 特定の文字を含むかどうかを判定する
セルの中に「Excel」という単語が含まれるかどうかを TRUE / FALSE で判定する方法です。
=ISNUMBER(SEARCH("excel", A1))
→ 結果: TRUE または FALSE
SEARCH関数が数値を返せばISNUMBER関数がTRUEになり、#VALUE! エラーならFALSEになります。 大文字小文字を無視して含有チェックできるので、データの振り分けに便利ですよ。
パターン5: IF関数と組み合わせてカテゴリ分類する
商品名にキーワードが含まれるかで分類するパターンです。
=IF(ISNUMBER(SEARCH("premium", A1)), "上位モデル", "通常モデル")
「Premium」「PREMIUM」「premium」のどの表記でもヒットするので、表記ゆれがあるデータでも正確に分類できます。
よくあるエラーと対処法
SEARCH関数で「あれ?」となるケースをまとめました。
#VALUE!エラーが出るケース
#VALUE! エラーの原因は主に2つです。
- 検索文字列が対象に含まれていない
- 開始位置が対象の文字数を超えている
=SEARCH("xyz", "Hello")
→ #VALUE! エラー(見つからない)
=SEARCH("H", "Hello", 100)
→ #VALUE! エラー(開始位置が範囲外)
どちらもIFERROR関数で対処するのが定番です。
=IFERROR(SEARCH("xyz", A1), "見つかりません")
ワイルドカード文字そのものを検索したいとき
? や * をワイルドカードではなく、文字として検索したい場合は チルダ(~) を前に付けます。
=SEARCH("~?", A1)
→ 「?」という文字そのものの位置を返す
=SEARCH("~*", A1)
→ 「*」という文字そのものの位置を返す
チルダ自体を検索したい場合は ~~ と2つ重ねます。 ワイルドカードが予期せずマッチしてしまうときは、この方法を思い出してくださいね。
意図しない位置がマッチするケース
SEARCH関数は 最初に見つかった位置 を返します。 2番目以降の位置が欲しい場合は、開始位置の引数を活用しましょう(基本的な使い方のセクションで解説しました)。
SEARCH関数とSEARCHB関数の違い
SEARCH関数にはバイト単位で動作する SEARCHB関数 があります。
| 項目 | SEARCH関数 | SEARCHB関数 |
|---|---|---|
| カウント基準 | 文字数(1文字=1) | バイト数(全角=2、半角=1) |
| 「エクセル」の中の「セル」 | 3 | 5 |
| 主な用途 | 一般的な文字位置検索 | 固定バイト長データの処理 |
SEARCHB関数の構文はSEARCH関数と同じです。
=SEARCHB(検索文字列, 対象, [開始位置])
具体例を見てみましょう。 「エクセル関数」の中から「関数」を探す場合です。
=SEARCH("関数", "エクセル関数")
→ 結果: 5(5文字目)
=SEARCHB("関数", "エクセル関数")
→ 結果: 9(9バイト目)
SEARCHB関数は全角文字を2バイトとしてカウントするので、位置がずれます。
通常の業務では SEARCH関数を使えば問題ありません。 SEARCHB関数が必要になるのは、レガシーシステムから出力された固定バイト長データを扱う場合など、限られた場面だけです。
SEARCH関数とFIND関数の使い分け
SEARCH関数とFIND関数は構文が同じなので、どちらを使うか迷いがちです。 判断基準をもう少し掘り下げましょう。
| 使うべき場面 | 選ぶ関数 | 理由 |
|---|---|---|
| 大文字小文字の区別が不要 | SEARCH | 表記ゆれを無視できる |
| ワイルドカードで柔軟に検索したい | SEARCH | ?, * が使える |
| 大文字小文字を厳密に区別したい | FIND | 「abc」と「ABC」を別扱いにできる |
| ワイルドカード文字を文字として扱いたい | FIND | チルダ不要でシンプル |
実務でのおすすめ: 迷ったらまずSEARCH関数を使ってみてください。 大文字小文字を区別しないほうが使い勝手がよい場面がほとんどです。 「厳密に区別する必要がある」と分かったときだけFIND関数に切り替えれば十分ですよ。
SEARCH関数とFIND関数はどちらも、LEFT関数・MID関数・RIGHT関数と組み合わせるパターンで使います。 文字列操作のレパートリーを増やしたい方は、あわせてチェックしてみてくださいね。
まとめ
この記事では、ExcelのSEARCH関数の使い方を基本から実務活用まで解説しました。 最後にポイントを振り返りましょう。
- SEARCH関数は
=SEARCH(検索文字列, 対象, [開始位置])で文字列の位置を返す - 大文字・小文字を区別しない のが最大の特徴
- ワイルドカード(?, *) が使え、あいまい検索ができる
- 見つからない場合は
#VALUE!エラーになるので、IFERROR関数で囲むのが定番 - LEFT・MID・RIGHT関数と組み合わせて文字列の抽出に活用できる
- FIND関数との違いは「大文字小文字の区別」と「ワイルドカード対応」の2点
- SEARCHB関数はバイト単位版で、通常業務ではSEARCHで十分
SEARCH関数は文字列操作の中でも使用頻度が高い関数です。 まずは「特定の文字が何番目にあるか」を調べるシンプルな使い方から始めてみてください。 LEFT・MID関数と組み合わせるテクニックに慣れれば、データ整理の幅がぐっと広がりますよ。
