概要
「セルの中に、この文字列が含まれているか知りたい」
「“[重要]”と書かれている行だけフラグを立てたい」
「メールアドレスに @ が入っているかチェックしたい」
こういう “パターン(部分文字列)が含まれているかどうか” を判定するときに使うのが SEARCH 関数です。
SEARCH はざっくり言うと、
文字列の中から「探したい文字列」を探して
見つかった位置(何文字目か)を返す関数
で、その結果を使って
「見つかったら〇〇、見つからなかったら△△」
というパターン一致判定を行っていきます。
SEARCH 関数の基本
基本構文と動き
=SEARCH(検索文字列, 対象文字列, [開始位置])
意味はこうです。
- 検索文字列:探したい文字列(例:”重要”)
- 対象文字列:どこから探すか(例:A2)
- 開始位置:何文字目から探すか(省略可。通常は省略でOK)
SEARCH の返り値は、
- 見つかった場合 → 「何文字目で見つかったか」(1以上の数字)
- 見つからなかった場合 → エラー(
#VALUE!)
例:A2 に「本日の重要なお知らせ」と入っているとき
=SEARCH("重要",A2)
→ 4(「重」は4文字目)
この「数値 or エラー」を利用して、
「見つかったかどうか」の判定に使います。
パターン一致の基本:ISNUMBER+SEARCH
「含まれているかどうか」をTRUE/FALSEでほしい
SEARCH は「位置」を返すので、そのままだと少し扱いづらいです。
実務ではほとんどの場合、ISNUMBER とセットで使います。
=ISNUMBER(SEARCH("重要",A2))
A2 に「重要」が含まれていれば → 数値 → ISNUMBER が TRUE
含まれていなければ → #VALUE! → ISNUMBER が FALSE
つまり、
- TRUE → パターン一致(含まれている)
- FALSE → パターン不一致(含まれていない)
という “パターン一致判定の型” になります。
応用1:IF と組み合わせて「フラグ」や「ラベル」を付ける
例:重要フラグの付与
A2 に件名が入っているとして、
「重要」という文字が含まれていれば「重要」、
含まれていなければ空欄、というフラグを B2 に付けたい場合。
=IF(ISNUMBER(SEARCH("重要",A2)),"重要","")
- A2 が「【重要】支払いのご案内」 → B2 = 「重要」
- A2 が「ご連絡」 → B2 = 空欄
メール件名、タスク名、備考欄などからの キーワード判定 によく使います。
応用2:複数パターンのどれかに一致するかを判定
例:「至急」「重要」「要確認」のどれかが入っているか
A2 の中に、
「至急」または「重要」または「要確認」
のどれかが含まれていれば TRUE にしたい場合。
=OR(
ISNUMBER(SEARCH("至急",A2)),
ISNUMBER(SEARCH("重要",A2)),
ISNUMBER(SEARCH("要確認",A2))
)
これを IF と組み合わせてラベル化することもできます。
=IF(
OR(
ISNUMBER(SEARCH("至急",A2)),
ISNUMBER(SEARCH("重要",A2)),
ISNUMBER(SEARCH("要確認",A2))
),
"対応優先",
""
)
応用3:メールアドレスなどの形式チェック(簡易)
SEARCH は簡単な「形式チェック」にも使えます。
(本格的な正規表現ほど厳密ではありませんが、“最低限の形”を見る用途で)
例:メールアドレスっぽいかどうかを判定
A2 にメールアドレスが入っているとして、
「@」と「.」が両方含まれていれば TRUE とします。
=AND(
ISNUMBER(SEARCH("@",A2)),
ISNUMBER(SEARCH(".",A2))
)
簡易チェックなので完璧ではありませんが、
「明らかにおかしいもの」をざっくり弾く用途には使えます。
応用4:部分一致での検索・抽出(フィルタと併用)
SEARCH と ISNUMBER を使えば、
「この文字を含む行だけをフィルタで表示」といったこともできます。
例:B列に次の式を書いて、下へコピーします。
=ISNUMBER(SEARCH("東京",A2))
A列に住所や店舗名が入っているとき、
B列が TRUE の行だけフィルタで抽出すれば、
「“東京”を含む行だけ」を一覧できます。
このように、検索条件を関数で持たせておいて、オートフィルタで使うのが実務でもよくあるパターンです。
応用5:SEARCH と FIND の違い(大小区別の有無)
パターン一致でよく混同されるのが SEARCH と FIND です。
- SEARCH:大文字・小文字を区別しない
- FIND:大文字・小文字を区別する
例:A2 = “Excel”
=SEARCH("ex",A2) → 1(見つかる)
=FIND("ex",A2) → エラー(大文字小文字が違うので見つからない)
「大小無視でパターン一致判定したい」なら SEARCH を使う、
という整理で覚えておくと迷いません。
パターン一致判定(SEARCH)の“型”まとめ
部分一致の基本判定(TRUE/FALSE)
=ISNUMBER(SEARCH("キーワード", 対象セル))
IF と組み合わせてラベル化
=IF(ISNUMBER(SEARCH("キーワード", 対象セル)), "ラベル", "")
複数キーワードのどれかに一致
=OR(
ISNUMBER(SEARCH("語1",対象)),
ISNUMBER(SEARCH("語2",対象)),
ISNUMBER(SEARCH("語3",対象))
)
簡易形式チェック(2つ以上の記号が含まれるか)
=AND(
ISNUMBER(SEARCH("記号1",対象)),
ISNUMBER(SEARCH("記号2",対象))
)
問題1
A2 の文字列の中に「重要」という文字が含まれているかどうかを、
TRUE / FALSE で判定したいです。
SEARCH と ISNUMBER を組み合わせた式を書いてください。
=ISNUMBER(SEARCH("重要",A2))
問題2
A2 に件名が入っています。
件名に「至急」が含まれていれば「至急対応」、
含まれていなければ空欄を表示したいです。
SEARCH と IF を使った式を書いてください。
=IF(ISNUMBER(SEARCH("至急",A2)),"至急対応","")
問題3
A2 の文字列の中に「東京」という文字が含まれている行だけを抽出したいです。
B2 に TRUE / FALSE を出力する式を書いてください。
=ISNUMBER(SEARCH("東京",A2))
問題4
A2 の文字列に「至急」「重要」「要確認」のいずれかが含まれている場合に TRUE を返したいです。
SEARCH と ISNUMBER、OR を使った式を書いてください。
=OR(
ISNUMBER(SEARCH("至急",A2)),
ISNUMBER(SEARCH("重要",A2)),
ISNUMBER(SEARCH("要確認",A2))
)
問題5
A2 にメールアドレスが入っています。
「@」と「.」が両方含まれている場合に TRUE を返したいです。
SEARCH、ISNUMBER、AND を使った式を書いてください。
=AND(
ISNUMBER(SEARCH("@",A2)),
ISNUMBER(SEARCH(".",A2))
)
SEARCH は「完全一致」ではなく “含まれているかどうか” を見る関数です。
ISNUMBER・IF・OR・AND と組み合わせることで、
キーワード判定、簡易バリデーション、フィルタ条件など、
“パターン一致判定”を柔軟に設計できるようになります。
