Excel。セル内の文字検索。IF関数ではワイルドカードが使えません
<IF+COUNTIF関数+ワイルドカード>
セル内に横浜市という文字が含まれているかどうかを、検索したい時には、「横浜市*」というように、ワイルドカードをつかうことで、検索することができます。
ただ、次のような表の場合、ちょっと困ったことが発生します。
C列の「○×」は、B列の市区町村のデータで、「横浜市」という文字が含まれていれば、「○」そうでなければ、「×」と算出させています。
C2の数式は、IF関数を使えば簡単に算出できると思ったら、トラブルが発生します。
C2の数式は、
=IF(COUNTIF(B2,"横浜市*"),"○","×")
と設定しています。
なぜ、COUNTIF関数をつかっているのか、理由は、意外かもしれませんが、IF関数の一番目の引数の論理式に「ワイルドカード」が使えないからです。
検索でワイルドカードを使う方法と同じ手法で、IF関数を作ってみるとわかります。
C2に次のように、入力します。
オートフィルで数式をコピーしてみると、算出結果がおかしいことがわかります。
=IF(B2="横浜市*","○","×")
横浜市が含まれているデータも「×」と算出されています。
比較演算子とセル番地を使う場合のように、「&(アンパサンド)」で結合させないといけないかと考えて、次のようにC2の数式を変更してみたとしても、横浜市が含まれているデータも「×」と算出されてしまいます。
=IF(B2="横浜市"&"*","○","×")
IF関数の論理式には、ワイルドカードをつかった論理式を設定することができないことがわかります。
そこで、COUNTIF関数をつかって、論理式を設定します。
COUNTIF関数は、ワイルドカードを、COUNTIF関数の二番目の引数である「検索条件」で使用することができるからです。
なので、最初に紹介した数式のように、
=IF(COUNTIF(B2,"横浜市*"),"○","×")
とIF+COUNTIF関数のネストで数式をつくることで、セル内に一部のデータが含まれている場合でも、確認することができます。
なお、論理式は、
COUNTIF(B2,"横浜市*") としています。「=」とかありませんが、横浜市という文字が含まれていたら「TRUE」。
含まれていなければ、「FALSE」を返してくれます。
TRUEならば、「真」。
FALSEならば、「偽」。
なので、「○」と「×」をそれぞれ算出してくれるというわけです。
Excelには、今回のケースのように、簡単そうに思えても、イメージ通りにいかず、意外とアイディアが必要となるケースがあるようです。
なお、最近追加されたIFS関数でもCOUNTIF関数をつかわないといけないので、ワイルドカードをつかうことはできないようです。