スプレッドシートのSEARCH関数|大文字小文字を無視して検索

スポンサーリンク

スプレッドシートで英語混じりのデータを扱っていると、表記のバラつきに悩みませんか?大文字・小文字が入り混じって、検索しづらいと感じたことはありませんか?手作業で目視チェックするのは非効率ですし、データが多いほどミスも増えますよね。

SEARCH関数を使えば、大文字・小文字を気にせず文字の位置を検索できます。この記事ではスプレッドシートのSEARCH関数を基本から丁寧に解説します。ワイルドカード検索・実務での活用パターン・エラー対処法までカバーしますね。

SEARCH関数とは?大文字小文字を無視して文字位置を検索する関数

SEARCH関数は、文字列の中から特定の文字が何文字目にあるかを返す関数です。読み方は「サーチ」。英語の「Search(検索する)」がそのまま名前になっています。

たとえば「Apple」という文字列に対して「apple」で検索しても、ちゃんと1文字目と判定してくれます。大文字と小文字を区別しないのがSEARCH関数の最大の特徴です。

さらに、ワイルドカード(*?)を使った曖昧検索にも対応しています。「パターンに合う文字列がどこにあるか」を調べられるのは、SEARCH関数だけの強みですよ。

FINDとの違いをひとことで言うと

スプレッドシートには文字位置を調べる関数がもう1つあります。FIND関数です。

違いはシンプルで、FINDは大文字小文字を区別するのに対し、SEARCHは区別しないという点です。さらにSEARCHはワイルドカードが使えます。詳しい比較は後のセクションで解説しますね。

SEARCH関数の書き方(構文と引数)

基本構文

=SEARCH(検索文字列, 対象テキスト, [開始位置])
引数必須/省略可説明
検索文字列必須探したい文字または文字列
対象テキスト必須検索対象のセルまたはテキスト
開始位置省略可何文字目から検索を始めるか(省略時は1)

戻り値は「検索文字列が最初に見つかった位置」の数値です。1文字目が「1」なので、0始まりではありません。

第3引数(開始位置)の使いどころ

開始位置を指定すると、途中から検索を開始できます。同じ文字が複数回出てくるテキストで「2番目の出現位置」を調べたいときに便利です。

=SEARCH("-", "ABC-001-RED")      → 4(最初のハイフン)
=SEARCH("-", "ABC-001-RED", 5)   → 8(2番目のハイフン)

1回目のSEARCHで最初のハイフン位置(4)を取得します。その次の位置(5)から検索を再開する仕組みです。区切り文字が複数あるデータを処理するときに活躍しますよ。

基本的な使い方

英語混じりのデータで大文字小文字を無視して検索する

セルA2に「Apple Juice」が入っているとします。

=SEARCH("apple", A2)   → 1(大文字Aでも小文字aでもマッチ)
=SEARCH("JUICE", A2)   → 7(大文字で検索してもヒットする)
=SEARCH("e", A2)       → 5(最初のeは5文字目)

「apple」で検索しても「Apple」にマッチするのがポイントです。ユーザーが入力した表記がバラバラでも、SEARCH関数なら問題なく位置を取得できます。

ただし全角と半角は区別される点に注意してください。全角の「A」と半角の「A」は別の文字として扱われます。

開始位置を指定して2回目以降の出現位置を探す

セルA2に「tanaka@example.com」が入っています。「a」が複数回出てくるデータで、2番目の「a」の位置を調べてみましょう。

=SEARCH("a", A2)       → 2(1番目のa)
=SEARCH("a", A2, 3)    → 4(2番目のa:3文字目以降で最初に見つかるa)
=SEARCH("a", A2, 5)    → 6(3番目のa:5文字目以降で最初に見つかるa)

開始位置を変えるだけで、同じ文字の出現位置を順番に取得できます。MID関数と組み合わせれば、区切り文字間のテキスト抽出にも応用できますよ。

SEARCH関数とFIND関数の違い

比較表(大文字小文字の区別・ワイルドカード・エラー時の挙動)

項目SEARCHFIND
大文字/小文字区別しない区別する
ワイルドカード*(任意の文字列)?(任意の1文字)が使える使えない
見つからない場合#VALUE!エラー#VALUE!エラー
構文=SEARCH(検索文字列, 対象テキスト, [開始位置])=FIND(検索文字列, テキスト, [開始位置])

エラー時の挙動は同じです。どちらもIFERROR(エラー時に代替値を返す関数)で対処できます。

どちらを使うか迷ったときの判断基準

使い分けのポイントは3つだけです。

  • 大文字小文字を区別したいFIND関数
  • 区別しなくてよい → SEARCH関数
  • ワイルドカードで曖昧検索したい → SEARCH関数

実務では「@」「/」「-」のような記号の位置を調べる場面が多いです。記号には大文字小文字がないので、FINDでもSEARCHでも同じ結果になります。

迷ったらSEARCHを選んでおくのがおすすめです。大文字小文字の違いでエラーになるリスクを避けられますよ。

ワイルドカードの使い方(*と?)

SEARCH関数だけが使える機能がワイルドカードです。FIND関数ではワイルドカードは使えません。

*(アスタリスク)で0文字以上の任意文字列にマッチ

* は「何文字でもOK(0文字以上)」を意味します。

=SEARCH("A*Z", "A123Z-test")   → 1(AではじまりZで終わるパターンにマッチ)
=SEARCH("re*t", "report")      → 1(reではじまりtで終わるパターン)

「A*Z」は「Aで始まってZで終わる任意の文字列」です。間に何文字あってもマッチします。

?(クエスチョン)で1文字だけにマッチ

? は「ちょうど1文字」を意味します。

=SEARCH("A?C", "ABC-test")    → 1(AとCの間に1文字あるパターン)
=SEARCH("A??C", "AB1C-test")  → 1(AとCの間に2文字あるパターン)

? を並べた数だけ、任意の文字にマッチします。文字数が決まっている場合に便利です。

なお、リテラルの ? そのものを検索したいときは、チルダ(~)でエスケープします。~ で「*という文字自体」を検索できますよ。

実務例:商品名のパターン検索

商品コードが「先頭2文字がカテゴリ+数字3桁」のような形式で、パターンにマッチするか調べたい場面を考えてみましょう。

A列(商品名)数式結果
EL-001 電子部品=ISNUMBER(SEARCH("EL-???", A2))TRUE
EL-12 電子部品=ISNUMBER(SEARCH("EL-???", A3))FALSE
MK-500 機械部品=ISNUMBER(SEARCH("EL-???", A4))FALSE

ISNUMBER(値が数値かどうか判定する関数)でSEARCHを囲むと、TRUE / FALSEで判定できます。「EL-???」は「EL-の後ろにちょうど3文字」を意味するので、「EL-12」のように2文字だとFALSEになります。

実務での活用例

ISNUMBER+SEARCHでキーワード含有フラグを立てる

データの中に特定のキーワードが含まれるかどうか判定するパターンです。分類やフラグ付けに使えます。

=IF(ISNUMBER(SEARCH("東京", A2)), "含む", "含まない")
A列(住所)結果
東京都新宿区含む
大阪府大阪市含まない
東京都渋谷区含む

SEARCH関数は文字列が見つかると位置(数値)を返します。ISNUMBERで「数値が返ったか」を判定すれば、含む・含まないの振り分けができます。大文字小文字を気にしないので、英語キーワードの判定にも安心して使えますよ。

01 result isnumber search

MID+SEARCHで特定区切り文字以降を取り出す

セルA2に「tanaka@example.com」が入っています。@より後ろの「example.com」を取り出してみましょう。

=MID(A2, SEARCH("@", A2)+1, LEN(A2))
  1. SEARCH("@", A2) → @は7文字目
  2. 7 + 1 = 8(@の次の位置)
  3. LEN(A2) → 19(十分大きい文字数を指定)
  4. MID(A2, 8, 19) → 8文字目から末尾までで「example.com」

!_images/spreadsheet-search-function/02_result_mid-search.png

MID関数の第3引数にLEN(文字数を返す関数)で全体の長さを渡しておくと、区切り文字以降すべてを取得できます。

逆に@より前を取り出すなら、LEFT関数を使います。

=LEFT(A2, SEARCH("@", A2)-1)  → 「tanaka」

IF+IFERRORで「含む/含まない」を安全に判定する

SEARCH関数は文字列が見つからないと#VALUE!エラーを返します。エラーを想定してIFERRORで囲むのが実務の定番です。

=IF(IFERROR(SEARCH("pdf", A2), 0) > 0, "PDF", "その他")
A列(ファイル名)結果
report.pdfPDF
data.xlsxその他
manual.PDFPDF

SEARCH関数は大文字小文字を区別しないので、「pdf」で検索しても「.PDF」にマッチします。拡張子の表記ゆれを気にせず判定できるのがうれしいポイントですよ。

03 result iferror search

エラー(#VALUE!)の原因と対処法

エラーの原因

SEARCH関数で#VALUE!エラーが出る原因は主に2つです。

原因説明
検索文字列が見つからない=SEARCH("@", "tanaka")テキストに@が存在しない
開始位置がテキスト長を超えている=SEARCH("a", "abc", 10)3文字しかないのに10文字目から検索

FIND関数と違い、大文字小文字の不一致ではエラーになりません。しかし、そもそも検索文字列がテキスト内に存在しないケースは起こり得ます。

IFERRORで安全に処理する

IFERRORでラップしておけば、エラーの代わりに任意の値を返せます。

=IFERROR(SEARCH("@", A2), 0)

@が見つかればその位置を、見つからなければ0を返します。

MID関数との組み合わせでも同じパターンが使えます。

=IFERROR(MID(A2, SEARCH("@", A2)+1, LEN(A2)), "メールアドレスではありません")

実務データは書式がバラバラなことも多いです。SEARCH関数を使うときはIFERRORとセットで覚えておくと安心ですよ。

まとめ

SEARCH関数の要点を整理します。

ポイント内容
基本構文=SEARCH(検索文字列, 対象テキスト, [開始位置])
戻り値検索文字列が最初に見つかった位置(1始まり)
大文字/小文字区別しない(FINDは区別する)
ワイルドカード*(任意の文字列)?(任意の1文字)が使える
全角/半角区別する(全角「A」と半角「A」は別文字)
見つからない場合#VALUE!エラー(IFERRORで対処)
開始位置省略先頭(1文字目)から検索

SEARCH関数は、大文字小文字を気にせず検索できるのが最大の強みです。英語混じりのデータやユーザー入力のように表記ゆれが多いデータには、FIND関数よりSEARCHが向いています。

さらにワイルドカードを使えば、パターンマッチングにも対応できます。まずは「ISNUMBER+SEARCHで含有チェック」というお手軽パターンから試してみてください。慣れてきたらワイルドカード検索やMID関数との組み合わせにも挑戦してみましょう。

タイトルとURLをコピーしました