目次
ワイルドカードテキストを含むIF文を作成しようとしているが、毎回失敗する? 問題は数式ではなく、関数自体にあります - ExcelのIFはワイルドカード文字をサポートしていません。 しかし、テキストの部分一致で動作させる方法があります。このチュートリアルでは、その方法を説明します。
Excelで部分一致やあいまい一致を行う場合、ワイルドカードを使用するのが最もわかりやすい方法です。 しかし、使用する特定の関数がワイルドカード文字をサポートしていない場合はどうでしょうか。 残念ながら、Excel IFはそのような関数の1つです。 COUNTIF、SUMIF、AVERAGEIFSなどの他の「条件付き」関数が完全にうまくワイルドカードで動くことを考えると特に残念なことに、このような結果になりました。
IFを他の関数と組み合わせることで、部分一致を評価させることができ、ExcelのIFワイルドカード式に代わる素晴らしい選択肢を得ることができます。
ExcelのIF関数でワイルドカードが使えない理由
下の表の例で、1列目のIDに「A」の文字が含まれているかどうかを調べるとします。 見つかったら-B列に「はい」と表示し、見つからなかったら-「いいえ」と表示します。
論理テストにワイルドカードテキストを含めれば、簡単に解決しそうな気がするのですが。
=IF(A2="*a*", "はい", "いいえ")
しかし、残念ながらうまくいきません。 この数式は、"A "を含むすべてのセルに対して "No "を返します。
ワイルドカードのIF文はなぜ失敗するのでしょうか? 見たところ、Excelは等号や他の論理演算子と一緒に使われるワイルドカードを認識しません。 ワイルドカードをサポートする関数のリストをよく見てみると、それらの構文は、ワイルドカードのテキストが直接引数に現れることを前提としていることに気がつくでしょう。
=COUNTIF(A2:A10, "*a*")
Excel IFは部分的なテキストを含む
ワイルドカードのIF式が失敗する理由がわかったところで、どうすればうまくいくかを考えてみましょう。 そのためには、IFの論理テストにワイルドカードを受け付ける関数、つまりCOUNTIF関数を埋め込めばいいのです。
IF(COUNTIF( セル , "* テキスト *"), value_if_true, value_if_false).この方法では、IFはワイルドカードを理解することに問題はなく、(COUNTIFは大文字と小文字を区別しないので)「A」または「a」を含むセルを完璧に識別することができます。
=IF(COUNTIF(A2, "*a*"), "Yes", "No")
この数式はB2、または2行目の他のセルに入り、あとは必要な数だけセルにドラッグすることができます。
このソリューションは、位置決めにも利用できます。 特定文字列 .ハイフンで区切られた2文字のグループからなるIDのみが有効であると仮定し、ワイルドカード文字列「?
=IF(COUNTIF(A2, "??-??"), "Valid", "")
この処方の仕組み
IFの論理テストには、指定したワイルドカード文字列に一致するセルの数を数えるCOUNTIF関数を使用します。 基準範囲は1つのセル(A2)なので、結果は常に1(一致が見つかった)または0(一致しなかった)です。 1は真、0は偽に相当するので、この式はカウントが1なら「有効」(値 _if _true)を返し、カウントが2なら空文字列(値 _if _false)を返すことになります。count が 0 の場合。
IF ISNUMBER SEARCH 部分一致の検索式
ExcelのIFで部分一致をさせるもう一つの方法は、論理テストにFINDかSEARCH関数を含めることです。 FINDは大文字小文字を区別し、SEARCHは区別しない点が違います。
したがって、小文字と大文字を同じ文字として扱うか、異なる文字として扱うかによって、これらの公式のいずれかが有効に働くことになります。
大文字小文字を区別しない 部分一致の場合の計算式。
if(isnumber(search(" テキスト ", セル )), value_if_true, value_if_false).大文字小文字を区別する 部分一致の場合の計算式。
どちらの関数も「セルを含む」タイプのマッチングを行うように設計されているので、この場合、ワイルドカードは実際には必要ありません。
例えば、「A」または「a」を含むIDを検出する場合、式は次のようになる。
=IF(ISNUMBER(SEARCH("A", A2)), "はい", "いいえ")
大文字の「A」だけを検索し、「a」を無視する場合は、以下の式になります。
=IF(ISNUMBER(FIND("A", A2)), "はい", "いいえ")
下のスクリーンショットのB6で、結果の違いを観察することができます。
この処方の仕組み
計算式の中心には、ISNUMBERとSEARCH(またはFIND)の組み合わせがある。
isnumber(search("a", a2))
SEARCH関数は、指定したテキスト(この例では「A」)を検索し、A2の文字列内の位置を返します。 テキストが見つからない場合は、#VALUEエラーを返します。 SEARCHとFINDはどちらも「セルを含む」タイプのマッチを行うようになっているので、この場合ワイルドカードは実際には必要ありません。
ISNUMBER関数は、数値をTRUEに、エラーを含むその他の値をFALSEに変換します。 論理値は、そのままIFの論理テストになります。 今回の場合、A2には「A」が含まれているので、ISNUMBERはTRUEを返します。
IF(TRUE, "はい", "いいえ")
その結果、IFはその設定値を返します。 value_if_true の引数で、"Yes "である。
Excel IF OR ステートメントとワイルドカード
ワイルドカードの文字列を含むセルを特定する必要がある場合、従来の IF OR 文と前述の COUNTIF または ISNUMBER SEARCH 式を組み合わせて使用することができます。
例えば、A2において大文字小文字を無視して "aa "または "bb "を検索し、どちらかが見つかれば「はい」を返すには、以下のいずれかの数式を使用します。
=IF(OR(ISNUMBER(SEARCH("aa", A2)), ISNUMBER(SEARCH("bb", A2))), "Yes", "")
または
=IF(OR(COUNTIF(A2, "*aa*"), COUNTIF(A2, "*bb*")), "はい", "")
2つのCOUNTIF関数の足し算も可能です。 この場合、プラス記号はOR演算子のように機能します。
=IF(COUNTIF(A3, "*aa*") + COUNTIF(A3, "*bb*"), "はい", "")
数式にワイルドカード文字列をハードコードする代わりに、以下のスクリーンショットに示すように、D2やF2といった別々のセルに入力することができます。 これらのセル参照は、数式が以下のセルに正しくコピーされるように$記号でロックされていることに注意してください。
=IF(OR(COUNTIF(A2, "*"&$D$2& "*"), COUNTIF(A2, "*"&$F$2& "*")), "Yes", "はい")
上記の計算式は、部分一致が2つの場合は有効ですが、3つ以上の場合は長くなりすぎてしまいます。 この場合は、別の方法でアプローチするのが合理的です。
SEARCH関数に複数の部分文字列を配列定数で与え、返された数をカウントし、結果が0より大きいかどうかをチェックします(これは、少なくとも1つの部分文字列が見つかったことを意味します)。
=IF(COUNT(SEARCH({"aa", "bb"}, A2))>0, "はい", "はい")
そうすることで、まったく同じ結果を、よりコンパクトな処方で得ることができるのです。
Excel IF AND 式でワイルドカードを使用する
あるセルが2つ以上の異なる部分文字列を含んでいるかどうかを調べたい場合、最も簡単な方法は、論理テストにワイルドカードを使ったCOUNTIFS関数を使うことです。
例えば、A列で「b」と「2」の両方を含むセルを検索したい場合、COUNTIFSの条件に「*b*」と「*2*」、条件範囲に「A2」を使用します。
=IF(COUNTIFS(A2, "*b*", A2, "*2*"), "はい", "")
もう一つの方法は、IF AND式とISNUMBER SEARCHを併用する方法です。
=IF(AND(ISNUMBER(SEARCH("b", A2)), ISNUMBER(SEARCH("2", A2))), "Yes", "")
この数式にはワイルドカード文字は含まれていませんが、同じセル内にある2つのワイルドカード文字列("*b*"と "*2*")を検索するような動作になります。
もちろん、あらかじめ定義されたセル(この例ではD2とF2)に検索値を入力し、そのセル参照を数式に与えることを妨げるものは何もない。
=IF(AND(ISNUMBER(SEARCH($D$2, A2)), ISNUMBER(SEARCH($F$2, A2))), "Yes", "はい")
もし、可能な限りコンパクトな数式を使いたいのであれば、配列定数のアプローチの方がいいかもしれません。 IF COUNT SEARCHの数式は、前の例とほとんど同じですが、今回は両方の部分文字列がA2に現れる必要があるので、数が2であるかどうかをチェックします。
=IF(COUNT(SEARCH({"b", "2"}, A2))=2, "はい", "")
これらは、ExcelのIF文でワイルドカードを使用する主な方法です。 あなたが他のソリューションを知っている場合は、他のユーザーは確かにあなたの経験をコメントで共有する場合に感謝します。 私は読んでいただきありがとうございます、私たちのブログで来週お会いしたいと考えています。
練習用ワークブック(ダウンロード
Excel IF ワイルドカード式の例 (.xlsx ファイル)