Excelのif関数でワイルドカードを使う方法は?解説!
Excelで「特定の文字を含むかどうか」を判定しようとして、=IF(A1="*東京*","○","×") のように書いたのに、思ったとおりに動かなかった経験はないでしょうか。実はこれは設定ミスではなく、IF関数そのものがワイルドカードを解釈しない仕様だからです。
結論を先にお伝えすると、IF関数の中にワイルドカードを直接書いても部分一致にはなりません。ただし、COUNTIFやSEARCHといった別の関数を組み合わせれば、「含む・含まない」の判定はきちんと実現できます。
この記事では、なぜIF関数でワイルドカードが効かないのかという理由から、実務でそのまま使える具体的な数式まで、順番に整理していきます。
- ExcelのワイルドカードとIF関数の関係と、効かない本当の理由
- IF+COUNTIFで「含む・含まない」を判定する基本の数式
- ISNUMBERやSEARCHを使ったあいまい検索の別解と使い分け
- 複数キーワードや他の関数へワイルドカードを応用する方法
なぜExcelのif関数でワイルドカードは使えないのか
まずは、つまずきの原因をはっきりさせておきます。ワイルドカードは「Excelのどこでも使える万能記号」ではなく、使える場所が決まっている記号です。ここを理解すると、IF関数だけで悩むのをやめて、正しい関数へ乗り換えられます。
Excelのワイルドカード「*」「?」「~」の基本
Excelのワイルドカードは、あいまいな条件を表すための記号で、全部で3種類あります。アスタリスク(*)は0文字以上の任意の文字列を表し、たとえば「東京*」なら東京で始まる文字列すべてに一致します。
クエスチョン(?)は任意の1文字を表します。「A?C」と書けば、AとCのあいだにちょうど1文字だけある「ABC」「A5C」などに一致し、文字数が違う「AC」や「ABBC」には一致しません。個数まで限定したいときに便利な記号です。
3つめのチルダ(~)はエスケープ用で、アスタリスクやクエスチョンという記号そのものを検索したいときに使います。「~*」と書けば、ワイルドカードとしての意味を打ち消して「*」という文字を探せます。価格表の「※」や条件記号を含むデータを扱うときに役立ちます。
ここで大切なのは、これらの記号は必ず半角で入力するという点です。全角の「*」は見た目が似ていても別の文字として扱われ、ワイルドカードとしては働きません。うまくいかないときは、まず全角と半角を疑ってみてください。
| 記号 | 意味 | 使用例 | 一致する文字列 |
|---|---|---|---|
| * | 0文字以上の任意の文字列 | 東京* | 東京、東京都、東京駅前 |
| ? | 任意の1文字 | 田?? | 田中央、田代田(田+2文字) |
| ~ | 記号自体を検索 | ~* | アスタリスク記号そのもの |
if関数がワイルドカードを無視してしまう理由
IF関数の論理式で使う等号(=)は、ワイルドカードを解釈しません。これがすべての原因です。=IF(A1="*東京*","○","×") と書くと、Excelは「A1のセルが、*東京* という6文字の文字列と完全に一致するか」を確かめてしまいます。
つまり、アスタリスクを「任意の文字列」ではなく、ただの記号として文字どおりに読んでいるわけです。その結果、A1が「東京都」でも一致とは判定されず、いつも「×」が返ってきてしまいます。数式の書き方が悪いのではなく、IF関数には部分一致を判定する機能自体がないと考えると分かりやすいです。
ワイルドカードを解釈できるのは、検索条件を文字列として受け取る一部の関数だけです。COUNTIFやSEARCHはその代表で、渡された「*東京*」をきちんと「東京を含むもの」という条件に翻訳してくれます。だからIF単体で戦うのをやめて、判定の部分だけを対応関数に任せるのが正解になります。
この発想さえ持てれば、あとは組み合わせるだけです。IFは「真のとき何を返すか、偽のとき何を返すか」という枠だけを担当し、含むかどうかの判断はCOUNTIFやSEARCHに外注する、というイメージを持っておいてください。
ワイルドカードが使える関数・使えない関数の一覧
どの関数がワイルドカードに対応しているかを覚えておくと、迷う時間が一気に減ります。ざっくり言うと、「検索条件を文字列で指定するタイプの関数」は対応していることが多いです。
対応している主な関数は、COUNTIFやCOUNTIFS、SUMIFやSUMIFS、AVERAGEIF、VLOOKUP・HLOOKUP・XLOOKUP、MATCH、そしてSEARCHです。DSUMなどのデータベース関数も条件にワイルドカードを使えます。一方で、IFやIFS、SWITCH、FIND、EXACTはワイルドカードを解釈しません。
覚え方のコツは「末尾がIFでも、IF単体とIFSは対象外」という点です。COUNTIFやSUMIFは範囲を集計する関数なので対応していますが、条件分岐そのもののIF・IFSは非対応です。似た名前で紛らわしいので、ここだけは区別しておくと安心です。
FINDとSEARCHもよく混同されます。どちらも文字の位置を探す関数ですが、ワイルドカードが使えるのはSEARCHだけで、FINDは使えません。さらにSEARCHは大文字小文字を区別しないのに対し、FINDは区別します。あいまい検索をしたいならSEARCHを選ぶ、と覚えておくと間違えにくいです。
数値や日付でワイルドカードが効かないときの注意点
もう一つ見落としやすいのが、ワイルドカードは文字列にしか効かないという制約です。「123で始まる数値」をCOUNTIFで数えようとして「123*」と書いても、対象が数値データだと期待どおりに一致しないことがあります。
これは、ワイルドカードが文字の並びを比較する仕組みだからです。セルの中身が数値として保存されていると、文字列としての「123…」という並びと見なされず、条件がすり抜けてしまいます。日付も内部的にはシリアル値という数値なので、同じ理由で「2026/*」のような書き方は狙いどおりに動かないことが多いです。
対処としては、判定したい数値を=TEXT(A1,"0") のように文字列へ変換してから比較する方法があります。あるいは、数値の大小で絞るなら、そもそもワイルドカードではなく >=100 のような比較条件を使うほうが素直です。ワイルドカードは「文字を含むか」を調べる道具だと割り切り、数値の範囲判定には別の条件を使い分けてください。
迷ったときは、対象セルが左揃えなら文字列、右揃えなら数値、というExcelの標準的な表示の癖も判断材料になります。うまくいかない原因が数式ではなくデータ型にあることは意外と多いので、最初に確認しておくと遠回りを防げます。
if関数で部分一致(ワイルドカード)を実現する方法
ここからは実践編です。IF関数に対応関数を組み込めば、「含む・含まない」の判定はもちろん、複数条件やあいまい検索まで自在にこなせます。丸ごとコピーして使える数式の形で紹介していきます。
if+countifで「含む・含まない」を判定する基本形
いちばん手軽で応用も効くのが、IFとCOUNTIFの組み合わせです。基本の形は次のようになります。A1に「東京」という文字が含まれているかを判定する例です。
=IF(COUNTIF(A1,"*東京*")>=1,"含む","含まない")
COUNTIFは本来「範囲の中で条件に合うセルの個数」を数える関数ですが、範囲に1つのセルを指定すれば、そのセルが条件に合うかどうかを0か1で返してくれます。結果が1以上なら含む、0なら含まないという理屈です。ここでワイルドカードの「*東京*」がそのまま条件として働くので、部分一致が実現します。
前方一致や後方一致にしたいときは、アスタリスクの位置を変えるだけです。「東京*」なら東京で始まるもの、「*駅」なら駅で終わるものだけに一致します。条件をどこまで絞るかを、記号の位置で直感的にコントロールできるのが強みです。
なお、判定条件は >=1 でも >0 でも同じ意味になります。COUNTIFの結果は0か正の整数なので、どちらで書いても問題ありません。ちなみに範囲を A2:A20 のように広げれば、その中に条件を含むセルが何件あるかを数えることもできるので、含む判定と件数集計を同じ式で兼ねられます。まずはこの基本形を土台として押さえておけば、ほとんどの「含む判定」はこれで片付きます。
if+isnumber+searchであいまい検索する
もう一つの定番が、ISNUMBERとSEARCHを組み合わせる方法です。COUNTIFとほぼ同じことができますが、こちらは「含む場所(位置)」を後から使いたいときに向いています。
=IF(ISNUMBER(SEARCH("東京",A1)),"含む","含まない")
SEARCHは、指定した文字が見つかると「何文字目にあるか」という数値を返し、見つからないと #VALUE! というエラーを返します。この性質を利用して、ISNUMBERで「数値かどうか」を調べれば、含むかどうかを判定できるという仕組みです。エラーなら含まない、数値なら含む、というわけです。
SEARCHのうれしい特徴は、大文字小文字を区別しない点です。「apple」でも「APPLE」でも同じように見つけてくれるので、英語まじりのデータで大小の表記ゆれを気にせず検索できます。区別したい場合だけ、SEARCHの代わりにFINDを使うと使い分けられます。
また、SEARCHの中でもワイルドカードは使えます。「t?st」のように書けば1文字ぶんのゆらぎを許容した検索もできるので、COUNTIFとは違う角度からあいまい検索を組み立てられます。位置情報が欲しいか、単純な有無だけでよいかで選ぶとよいです。
セルに入力した文字を部分一致で探す方法
実務では、検索する言葉を数式に直接書くのではなく、別のセルに入力して切り替えたい場面が多いです。たとえばB1に検索語を入れ、その語を含む行を判定したい、というケースです。
このときにやりがちな失敗が、=COUNTIF(A1,"*B1*") と書いてしまうことです。これだと「B1という3文字を含むか」を探してしまい、セルの中身を見てくれません。正しくは、文字列結合の「&」でセルとアスタリスクをつなぐ必要があります。
=IF(COUNTIF(A1,"*"&B1&"*")>=1,"含む","含まない")
「*”&B1&”*”」の部分は、「アスタリスク+B1の中身+アスタリスク」という条件を組み立てています。B1に「東京」と入れれば「*東京*」と同じ意味になり、B1を書き換えるだけで検索語を自由に差し替えられます。数式を毎回直さずに済むので、フィルター代わりの判定表を作るときにとても便利です。
この「&でつなぐ」考え方は、SUMIFやVLOOKUPなど他の関数でも同じように使えます。検索条件をセル参照にしたいときは、記号とセルを結合すると覚えておくと、いろいろな場面で応用が利きます。
複数キーワードをor条件・and条件で判定する
「AかBのどちらかを含む」「AもBも両方含む」といった複数条件も、COUNTIFの足し算と掛け算で表現できます。まずはOR条件(どちらかを含む)から見ていきます。
=IF(COUNTIF(A1,"*りんご*")+COUNTIF(A1,"*みかん*")>0,"該当","-")
COUNTIFを足し算でつなぎ、合計が0より大きければ「どちらかは含む」と判定できます。OR条件は足し算と覚えておくと分かりやすいです。キーワードが3つ4つに増えても、同じようにCOUNTIFを足していくだけで対応できます。
反対に「両方を含む」というAND条件は、掛け算で表現します。=IF((COUNTIF(A1,"*A*")>0)*(COUNTIF(A1,"*B*")>0),"両方","-") のように、それぞれの判定結果を掛け合わせます。片方でも0なら全体が0になるため、両方そろったときだけ「両方」が返る仕掛けです。
条件が複雑になってきたら、作業列を用意して一段ずつ判定を分けるのも有効です。1つのセルにすべて詰め込むより、途中経過を見える化したほうが後で修正しやすいです。読みやすさを優先すると、結果的にミスも減らせます。
sumifやvlookupなど他の関数でワイルドカードを使う
ワイルドカードは判定だけでなく、集計や抽出でも活躍します。たとえばSUMIFを使えば、特定の文字を含む行だけを合計できます。商品名に「文具」を含む売上だけを足したい、といった場面です。
=SUMIF(A2:A10,"*文具*",B2:B10)
この式は、A列の商品名に「文具」を含む行を探し、対応するB列の数値を合計します。IFで1件ずつ判定しなくても、範囲全体をまとめて処理できるのが便利な点です。同じ考え方でCOUNTIFSやAVERAGEIFSにも展開でき、条件を増やしながら集計できます。
VLOOKUPでもワイルドカードは使えます。=VLOOKUP("山田*",A:B,2,FALSE) と書けば、「山田」で始まる最初のデータを検索できます。氏名の下の名前まで分からないときや、表記が少し揺れているデータを引きたいときに役立ちます。ただし複数該当する場合は最初の1件だけが返る点には注意してください。
このように、ワイルドカードは検索・集計系の関数と組み合わせてこそ本領を発揮します。IFで含む判定をするのはあくまで入口で、実務ではSUMIFやVLOOKUPと合わせて使う場面のほうが多くなります。
countifとsearchのどちらを使うべきか
COUNTIFとSEARCH、どちらでも「含む判定」はできますが、向き不向きがあります。最後に選び方を整理しておきます。
COUNTIFが向いているのは、前方一致や後方一致を指定したいときや、複数のセル範囲をまとめて数えたいときです。式にワイルドカードを直接書けるので、条件の形を細かくコントロールしたい場合に扱いやすいです。範囲を対象にできる点も、表全体を集計する用途に合っています。
一方のSEARCHが向いているのは、1つのセルに特定の言葉が含まれるかを調べたいときや、大文字小文字を区別したくないときです。含む位置を数値で取り出せるため、後の計算につなげたい場合にも便利です。英語の表記ゆれを吸収したい場面では、SEARCHのほうが素直に書けます。
迷ったら、シンプルな含む判定はCOUNTIF、位置や大小区別が絡むならSEARCHという基準で選べば大きく外しません。どちらも正解になる場面が多いので、自分が読みやすいと感じるほうを主役にして、必要に応じて使い分けていくのがおすすめです。
下の表に、2つの方法の違いを簡単にまとめておきます。手元のデータや目的に合わせて、どちらを主役にするか選ぶときの参考にしてください。
| 比較項目 | IF+COUNTIF | IF+ISNUMBER+SEARCH |
|---|---|---|
| 前方・後方一致 | 記号の位置で指定しやすい | ワイルドカードで指定は可能 |
| 大文字小文字 | 区別しない | 区別しない(FINDなら区別) |
| 範囲をまとめて数える | 得意 | 1セル向き |
| 含む位置の取得 | できない | 数値で取り出せる |
xlookupやfilter関数で部分一致を扱う
Microsoft 365やExcel 2021以降を使っているなら、新しい関数でも部分一致を扱えます。とくにXLOOKUPとFILTERは、条件に合うデータをまとめて取り出したいときに便利です。従来のVLOOKUPより柔軟に書けるので、環境が新しい方は覚えておくと選択肢が広がります。
XLOOKUPでワイルドカードを使うときは、少し注意が必要です。5番目の引数(一致モード)に「2」を指定して、はじめてワイルドカードが有効になります。=XLOOKUP("山田*",A:A,B:B,,2) と書けば、「山田」で始まる最初のデータを探せます。VLOOKUPと違い、指定しないとワイルドカードが効かない点だけ押さえておいてください。
FILTER関数はワイルドカードを直接は受け付けませんが、SEARCHと組み合わせれば部分一致で行を抽出できます。=FILTER(A2:B10,ISNUMBER(SEARCH("東京",A2:A10))) のように書くと、A列に「東京」を含む行だけをまるごと取り出せます。該当する行が複数あっても、下方向に自動で書き出してくれるのがFILTERの強みです。
これらの新しい関数は、1件だけの判定というより、条件に合うデータの一覧を作りたいときに真価を発揮します。IF+COUNTIFで1つずつ判定する方法と、FILTERでまとめて抜き出す方法を、目的に応じて使い分けると作業がぐっと速くなります。
意図しない部分一致を防ぐコツ
ワイルドカードは便利な反面、広く一致しすぎてしまうという落とし穴があります。たとえば「*東京*」で判定すると、「東京都」だけでなく「西東京市」や「東京ばな奈」まで一致してしまい、狙いとずれることがあります。
これを防ぐには、条件をどこまで絞るかを意識してアスタリスクの位置を決めるのが基本です。先頭を固定したいなら前方一致の「東京*」、末尾を固定したいなら後方一致の「*東京」にすると、余計なヒットを減らせます。「東京で始まる」ことだけを判定したいのに「*東京*」と書いてしまうのは、よくある取りこぼしの原因です。
そもそも部分一致ではなく完全一致でよいなら、ワイルドカードを外して =IF(A1="東京都","○","×") のように書くのが確実です。あいまいさが必要ない場面でワイルドカードを使うと、かえって想定外の一致を招きます。「どこまでゆるく一致させたいか」を先に決めてから記号を置くと、判定のブレを抑えられます。
チェックのコツは、判定した結果を一度目で確認することです。想定より多くのセルが「含む」になっていたら、条件がゆるすぎるサインです。前方一致や後方一致に切り替えて、少しずつ条件を締めていくと、狙いどおりの判定に近づけられます。
判定結果を作業列にして表を絞り込む
1件だけの判定なら数式1つで十分ですが、実務では表全体に判定をかけて絞り込みたいことがほとんどです。そんなときは、判定用の「作業列」を1列用意すると一気に扱いやすくなります。
手順はシンプルです。まずデータの隣に空いた列を作り、先頭のセルに =IF(COUNTIF(A2,"*文具*")>=1,"該当","") のような数式を入れます。次にそのセルの右下をダブルクリックするか、下方向へオートフィルすれば、表の最後まで一気に判定列が完成します。あとはその列でフィルターをかければ、条件に合う行だけを表示できます。
判定列を作るメリットは、条件と結果が目で見える形で残ることです。数式の中にすべてを詰め込むより、途中の判定を列として分けたほうが、後から見直したときに何をしているか分かりやすいです。件数を数えたいなら、その判定列を対象にCOUNTIFやSUMIFで集計すれば、含むデータの数や合計もすぐに出せます。
判定列は最終的に不要なら、値として貼り付け直すか、集計が終わったあとに列ごと削除すれば見た目もすっきりします。作業の途中だけ使う「下ごしらえ用の列」と考えておくと、表を汚さずに済みます。
エラーや空白が出たときの原因と対処
数式を入れたのに結果が変だ、という場合は、いくつか決まった原因があります。まず多いのが、SEARCHを単体で使ったときの #VALUE! エラーです。SEARCHは文字が見つからないとエラーを返すため、そのままだと画面がエラーだらけになります。
これは、=IF(ISNUMBER(SEARCH("東京",A1)),"含む","含まない") のようにISNUMBERで包んであげれば解消します。どうしてもSEARCHを直接使いたい場合は、=IFERROR(SEARCH("東京",A1),"") のようにIFERRORでエラーを空白へ置き換える方法もあります。エラーが出たら、まずISNUMBERかIFERRORで受け止めると覚えておくと安心です。
次に多いのが、前半でも触れた全角と半角の取り違えです。ワイルドカードの「*」「?」は半角でないと働かないため、全角で入力していると、いつまでたっても一致しません。うまくいかないときは、条件の記号をいったん半角で打ち直してみてください。
それでも一致しないときは、対象データが数値になっていないかを疑います。左揃えなら文字列、右揃えなら数値というExcelの表示の癖を手がかりに、必要なら TEXT 関数で文字列に変換してから判定します。原因は「数式」よりも「データの形」にあることが多いので、順番に切り分けていけば、たいていの不具合は解決できます。
Excelのワイルドカードとif関数に関するよくある質問(FAQ)
Q1. IF関数の中にそのまま「*」を書くのはなぜダメなのですか?
A. IF関数の等号(=)はワイルドカードを解釈せず、記号を文字どおりに読んでしまうためです。=IF(A1="*東京*",…) は「*東京*という文字列と完全一致するか」を調べる式になり、部分一致にはなりません。含む判定をしたいときは、COUNTIFやSEARCHをIFの中に組み込んでください。
Q2. COUNTIFとSEARCH、初心者はどちらから覚えるとよいですか?
A. まずは=IF(COUNTIF(A1,"*文字*")>=1,…) の形から覚えるのがおすすめです。式にワイルドカードを直接書けて意味が分かりやすく、前方一致や後方一致にも応用しやすいからです。大文字小文字を区別したくない検索や、位置を使いたい場面が出てきたら、SEARCHを追加で覚えると無理がありません。
Q3. 検索する言葉を別のセルから参照するにはどうすればよいですか?
A. 文字列結合の「&」を使い、"*"&B1&"*" のようにアスタリスクとセルをつなぎます。=IF(COUNTIF(A1,"*"&B1&"*")>=1,…) と書けば、B1の中身を検索語として使えます。"*B1*" と直接書くとB1という文字を探してしまうので、必ず記号とセルを結合してください。
Q4. 数値のデータにワイルドカードが効かないのはなぜですか?
A. ワイルドカードは文字の並びを比較する仕組みのため、数値や日付には効きにくいです。判定したいときは =TEXT(A1,"0") などで文字列に変換してから比較するか、数値の大小で絞るなら比較演算子を使うほうが確実です。対象セルが左揃えか右揃えかで、文字列か数値かを見分けられます。
まとめ|excelのワイルドカードとif関数を正しく使い分けよう
今回は、Excelのif関数でワイルドカードが使えない理由と、その解決策を整理しました。ポイントは、IF関数の等号はワイルドカードを解釈しないため、含む判定はCOUNTIFやSEARCHに任せる、という一点に尽きます。
基本形は =IF(COUNTIF(A1,"*文字*")>=1,"含む","含まない") で、大文字小文字を区別したくないときや位置を使いたいときはISNUMBERとSEARCHの組み合わせが便利です。検索語をセル参照にするなら「&」で結合し、複数条件は足し算と掛け算で表現できます。
ワイルドカードは「文字を含むか」を調べる道具だと割り切り、対応する関数と組み合わせれば、判定も集計も思いどおりにこなせます。まずは基本の数式をコピーして、手元のデータで試してみてください。
最後に、つまずいたときの切り分け手順をおさらいしておきます。まず記号が半角かどうかを確認し、次に対象セルが文字列か数値かを見て、それでも動かなければ条件がゆるすぎないかを疑う、という順番です。「記号 → データ型 → 条件のゆるさ」の3点をこの順で確認すれば、原因はほぼ特定できます。一度この流れを身につけてしまえば、部分一致の判定で迷うことはぐっと少なくなります。
関連する関数の使い方は、次の記事でもくわしく紹介しています。あわせて参考にしてみてください。
より正確な仕様は、マイクロソフトの公式ドキュメントも確認しておくと安心です。