Excelで「このセルに、特定の文字列が含まれているか」を判定したい場面は、実務で本当によくありますよね。たとえば、メールアドレスかどうかを判定したい、特定のキーワードが入っている行だけを抽出したい、といったケースです。
ところが実際にやろうとすると、「FIND?SEARCH?COUNTIF?結局どれを使えばいいの?」と迷ってしまう方が非常に多いんです。さらに、式を書いた途端に #VALUE! エラーが出て、そこで止まってしまった経験がある方も少なくないでしょう。
この記事では、Excelで「文字列を含むかどうか」を判定する方法を、考え方から丁寧に整理したうえで、実務でそのまま使える安全な完成形の数式を紹介します。関数の違いで迷わなくなり、「なぜこの式なのか」まで理解できる構成にしています。
Excelで「文字列を含む」を判定する前に知っておくべき基本
「含む」とは何を意味しているのか
Excelでいう「文字列を含む」とは、セルの中に特定の文字列が一部でも入っているかどうかを判定することを指します。セル全体が一致している必要はありません。
たとえば、次のようなケースはすべて「含む」と判定されます。
- 「sample@example.com」に「@」が含まれている
- 「東京都千代田区」に「東京」が含まれている
- 「ABC-123」に「ABC」が含まれている
ここで重要なのは、「完全一致」とは考え方が違うという点です。セルの中の一部分でも条件に合致すれば「含む」と判断します。
完全一致・部分一致の違い
文字列判定でよく混乱するのが、「完全一致」と「部分一致」の違いです。
- 完全一致:セルの内容が、指定した文字列とまったく同じ
- 部分一致(含む):セルの中に、指定した文字列が一部でも含まれている
たとえば、「ABC」という条件に対して、
- 「ABC」→ 完全一致・部分一致の両方に該当
- 「ABC-001」→ 部分一致のみ
- 「XABCY」→ 部分一致のみ
「含む」を判定したい場合は、完全一致用の関数では対応できないという点を、まず押さえておきましょう。
大文字・小文字を区別する/しない問題
もう一つ重要なのが、英字の大文字・小文字を区別するかどうかです。Excelの文字列判定では、使う関数によって挙動が変わります。
- 大文字・小文字を区別する:FIND関数
- 大文字・小文字を区別しない:SEARCH関数、COUNTIF関数
たとえば、「abc」という条件で、
- 「ABC」をヒットさせたい → SEARCH
- 「abc」だけを厳密に判定したい → FIND
実務では、大文字・小文字を区別しないケースのほうが圧倒的に多いため、迷ったら「区別しない」関数を選ぶのが無難です。
「含む判定」は、まず「完全一致か?部分一致か?」「大文字・小文字を区別するか?」を決める。ここを整理するだけで、関数選びで迷うことが一気に減ります。
Excelで文字列を「含むかどうか」を判定する代表的な方法
FIND関数を使って判定する方法
FIND関数は、指定した文字列がセルの中に何文字目から存在するかを返す関数です。該当する文字列が見つからない場合は、#VALUE! エラーになります。
たとえば、A1に文字列が入っており、「ABC」を含んでいるか判定したい場合、次のように書けます。
=FIND("ABC",A1)
この式がエラーにならず、数値が返ってくれば、「ABC」が含まれていると判断できます。数値は開始位置なので、1以上の値が返ります。
ただし、FIND関数には重要な特徴があります。
- 大文字・小文字を区別する
- 見つからないとエラーになる
そのため、FIND関数単体で判定に使うと、エラー処理が必要になります。
SEARCH関数を使って判定する方法
SEARCH関数は、FIND関数とほぼ同じ動きをしますが、大文字・小文字を区別しないという大きな違いがあります。
=SEARCH("abc",A1)
この場合、「ABC」「Abc」「abc」など、どの表記でもヒットします。実務では、こちらのほうが使いやすいケースが多いでしょう。
一方で、SEARCH関数も、見つからない場合は #VALUE! エラーになります。この点はFIND関数と同じです。
ISNUMBER関数と組み合わせた安全な判定式
FINDやSEARCHをそのまま使うとエラーが出てしまうため、実務ではISNUMBER関数と組み合わせるのが定番です。
たとえば、「ABC」を含んでいるかを TRUE / FALSE で安全に判定する式は、次のとおりです。
=ISNUMBER(SEARCH("ABC",A1))
この式では、SEARCHが数値を返した場合は TRUE、エラーの場合は FALSE になります。エラーを意識せずに使えるため、IF関数との相性も非常に良いです。
「文字列を含む」判定の基本形は、ISNUMBER+SEARCHと覚えておくと、まず困りません。
COUNTIF関数で「文字列を含む」を判定する方法
ワイルドカード(*)を使った部分一致
COUNTIF関数は、本来は「条件に合うセルの個数を数える」関数ですが、文字列を含むかどうかの判定にもよく使われます。そのカギになるのが、ワイルドカード(*)です。
たとえば、A1に入っている文字列が「ABC」を含んでいるかを判定したい場合、次のように書けます。
=COUNTIF(A1,"*ABC*")
結果が 1 であれば「含む」、0 であれば「含まない」と判断できます。「*」は「任意の文字列」を意味するため、前後に付けることで部分一致が可能になります。
この方法のメリットは、エラーが出ない点です。FINDやSEARCHのように #VALUE! を気にする必要がありません。
COUNTIFが向いているケース・向いていないケース
COUNTIFは便利ですが、すべての「含む」判定に向いているわけではありません。向き・不向きを整理しておきましょう。
- 向いているケース
- エラーを出したくない
- TRUE / FALSE ではなく 0 / 1 で判定したい
- 大量データをシンプルな条件で判定したい
- 向いていないケース
- 大文字・小文字を区別したい
- 開始位置などの情報が欲しい
- 複雑な条件分岐と組み合わせたい
COUNTIFは大文字・小文字を区別しない点も特徴です。厳密な判定が必要な場合は、FINDやSEARCHを使うほうが適しています。
複数条件で「含む」を判定したい場合の考え方
「AまたはBを含む」「AとBの両方を含む」といった複数条件の判定では、COUNTIFを足し算や掛け算で組み合わせる方法があります。
たとえば、「ABC」または「XYZ」を含んでいるかを判定したい場合は、次のように書けます。
=COUNTIF(A1,"*ABC*")+COUNTIF(A1,"*XYZ*")
結果が 1 以上であれば、どちらかを含んでいると判断できます。
一方、「ABC」と「XYZ」の両方を含むかを判定したい場合は、掛け算を使います。
=COUNTIF(A1,"*ABC*")*COUNTIF(A1,"*XYZ*")
この場合、結果が 1 であれば両方を含み、0 であればどちらか(または両方)を含まない、という判断になります。
COUNTIFは「エラーを出さず、シンプルに判定したい」場面で非常に強力ですが、用途を選ぶことも忘れないようにしましょう。
IF関数と組み合わせた「含む」判定の実務例
特定の文字を含む場合にフラグを立てる
「特定の文字列を含んでいる行にフラグを立てたい」というのは、実務で最も多い使い方のひとつです。判定結果を TRUE / FALSE ではなく、「対象」「対象外」などの分かりやすい表示にしたい場面ですね。
SEARCH関数とISNUMBER関数を使った、定番の書き方は次のとおりです。
=IF(ISNUMBER(SEARCH("ABC",A1)),"対象","対象外")
A1に「ABC」が含まれていれば「対象」、含まれていなければ「対象外」と表示されます。エラーを出さずに判定できるため、共有用のExcelでも安心して使えます。
IF+ISNUMBER+SEARCHは、「含む」判定の完成形と考えて問題ありません。
メールアドレス・記号を含むかの簡易チェック
入力値がメールアドレスらしいかどうかを、簡易的にチェックしたい場面もよくあります。その場合、「@」を含んでいるかどうかを見るだけでも、一定の判定が可能です。
=IF(ISNUMBER(SEARCH("@",A1)),"OK","NG")
この方法は正規表現のような厳密なチェックではありませんが、入力漏れや明らかな誤りを弾く用途には十分でしょう。
同じ考え方で、「-」「/」「#」など、特定の記号を含むかどうかのチェックにも応用できます。
分類・振り分けに使う文字列判定
文字列を含むかどうかの判定は、データの分類や振り分けにもよく使われます。たとえば、商品名に特定のキーワードが含まれていればカテゴリを分ける、といったケースです。
次の例では、「送料」という文字を含むかどうかで分類しています。
=IF(ISNUMBER(SEARCH("送料",A1)),"送料関連","商品")
このように、文字列判定を軸にIF関数を組み合わせることで、手作業の分類を自動化できます。
「含む」判定は、チェック用途だけでなく、分類・自動化にも直結する点が、実務で重宝される理由です。
「文字列を含む」判定でよくある失敗とエラー対策
#VALUE! エラーが出る理由
「文字列を含む」判定で最も多いトラブルが、#VALUE! エラーです。特に、FIND関数やSEARCH関数を単体で使ったときに発生しやすいですね。
このエラーが出る最大の理由は、指定した文字列が見つからなかった場合に、これらの関数がエラーを返す仕様にあります。
たとえば、次の式は、条件に一致しないと #VALUE! になります。
=SEARCH("ABC",A1)
実務では、このエラーが連鎖して、IF関数や他の計算がすべて止まってしまうことも少なくありません。
#VALUE! を避けたい場合は、必ず ISNUMBER と組み合わせる。これが、最も安全で再現性の高い対策です。
空白・見えない文字による判定ミス
「確かに文字は入っているのに、なぜかヒットしない」という場合、見えない空白や制御文字が原因になっていることがあります。
特に多いのが、次のようなケースです。
- セルの先頭や末尾に余計な空白が入っている
- 全角スペースと半角スペースが混在している
- CSVやWebコピー由来の不可視文字が含まれている
このような場合は、判定の前に TRIM 関数で空白を除去しておくと、トラブルを防ぎやすくなります。
=ISNUMBER(SEARCH("ABC",TRIM(A1)))
「含まない」は、実は「余計な文字が含まれている」ケースが多いという点は、意外と見落としがちですよ。
文字列として扱われていないケースの注意点
数値や日付として入力されているセルに対して、「含む」判定をしようとして失敗するケースもあります。
SEARCHやFINDは文字列を対象にした関数のため、対象セルが数値の場合、意図しない結果になることがあります。その場合は、TEXT関数などで明示的に文字列へ変換するのが安全です。
=ISNUMBER(SEARCH("2025",TEXT(A1,"yyyy")))
このように、判定対象を文字列として扱う意識を持つことで、「なぜか判定できない」問題を防げます。
用途別|どの関数を使うべきか早見表
とにかく安全に判定したい場合
「エラーを絶対に出したくない」「共有用のExcelで事故を防ぎたい」という場合は、ISNUMBER+SEARCHの組み合わせが最優先です。
=ISNUMBER(SEARCH("ABC",A1))
この形であれば、条件に合わない場合でも FALSE が返るだけなので、#VALUE! エラーに悩まされることがありません。IF関数との相性も非常に良く、実務では最も汎用性が高い方法です。
迷ったら ISNUMBER+SEARCH を選べば、大きな失敗はまず起きません。
大量データを高速に処理したい場合
数千〜数万行のデータを扱う場合は、処理の軽さも重要になります。そのようなケースでは、COUNTIF関数が向いています。
=COUNTIF(A1,"*ABC*")
COUNTIFは内部処理がシンプルなため、大量データでも比較的高速に動作します。また、ワイルドカードを使うことで、部分一致(含む)を直感的に指定できる点もメリットです。
ただし、COUNTIFは大文字・小文字を区別できない点や、複雑な条件分岐には向かない点を理解したうえで使う必要があります。
条件分岐・分類をしたい場合
「含むかどうか」で表示内容を変えたい、分類したいといった場合は、IF関数との組み合わせが前提になります。
その中でも、最も読みやすく、他人に意図が伝わりやすいのが次の形です。
=IF(ISNUMBER(SEARCH("ABC",A1)),"該当","非該当")
この式は、「ABCを含んでいれば該当」という意図が一目で分かります。後から見返したときにも安心ですね。
実務では「正しく動く」よりも「意図が伝わる式」を優先することで、長期的なトラブルを防げます。
Excelの「文字列を含む」に関するよくある質問(FAQ)
FINDとSEARCHはどちらを使うべき?
基本的には、SEARCH関数を使う場面のほうが多いと考えて問題ありません。理由は、SEARCH関数が大文字・小文字を区別しないため、実務データの揺れに強いからです。
一方で、次のようなケースではFIND関数が向いています。
- IDやコードなど、表記が厳密に決まっている
- 大文字・小文字の違いにも意味がある
迷ったら SEARCH、厳密さが必要なら FINDと覚えておくと、関数選びで困りません。
COUNTIFだけ覚えれば十分?
COUNTIF関数は非常に便利ですが、すべての「含む」判定をカバーできるわけではありません。
COUNTIFは次のような場面に向いています。
- エラーを出したくない
- シンプルな部分一致で十分
- 大量データをまとめて判定したい
一方で、IF関数と組み合わせて細かく分岐したい場合や、開始位置・条件の意味を明確にしたい場合は、SEARCH+ISNUMBERのほうが適しています。
COUNTIFは「手軽さ重視」、SEARCH系は「制御・可読性重視」と使い分けるのが現実的です。
正規表現のようなことはできる?
Excelの標準関数だけでは、正規表現のような高度なパターンマッチングはできません。ただし、ワイルドカード(*、?)を使えば、ある程度の柔軟な判定は可能です。
より高度な判定が必要な場合は、次のような選択肢があります。
- Power Query を使う
- VBA を使う
- Office 365 の新関数(TEXTSPLIT 等)と組み合わせる
とはいえ、多くの実務では、この記事で紹介した方法で十分対応できます。まずは「安全に含む判定ができること」を最優先に考えてみてくださいね。




