Excel。IF関数の盲点。論理式にワイルドカードが使えないのでどうしたらいい?
<IF+COUNTIF関数&ワイルドカード:Office365,Excel2016>
文字列に該当する文字があるかどうかを判断するケースで、意外と出来なくて驚くことがあるのですが、
今回はその中から、IF関数の盲点というか、
IF関数の論理式にワイルドカードが使えないので、
どうしたらいいのかということをご紹介していきます。
次の表を使っていきます。
文字検索自体のおさらいからやっておきましょう。
【神奈川県の人には○】
C列に住所が神奈川県の人にDMを発送するとして、神奈川県の人には○を表示するには、
IF+LEFT関数のネストを使うことで、
簡単に判断することができますよね。
C2の数式は、
=IF(LEFT(B2,4)="神奈川県","○","")
ですね。
これは、B2の文字列を左から4文字が神奈川県かどうかを聞いて、
判断している数式ですね。
なお、C5も神奈川県だろうと思うかもしれませんが、
B列には神奈川県とありませんので、当然該当しません。
【横浜市の人には○】
では、文字列の左や右ではなくて、”中”だったらどうしたらいいのでしょうか?
その場合は、MID関数を使えばよいので、
今度は、IF+MID関数のネストで判断することができます。
D2の数式は、
=IF(MID(B2,5,3)="横浜市","○","")
ですね。
B2の先頭から5文字目を起点に3文字分が横浜市だったら、
○と判断する数式ですね。
なので、これまた、B5に横浜市とあっても、
先頭から5文字目から横浜市となっていないので、該当しなかったわけですね。
【LEFT関数やMID関数は決まっていないと使えない】
LEFT関数やMID関数など、一番左や文字数がいくつからなど、
統一して決まっていないと使えないわけです。
そこで、ワイルドカードを使えば、解決するように思えます。
ワイルドカードですが、
「*横浜市*」とすれば、
文字列の一部に横浜市とあれば、該当すると判断されるわけですね。
では、検索を使って、抽出されるのか確認してみましょう。
ホームタブの「検索と選択」にある、
「検索」をクリックすると、検索と置換ダイアログボックスが表示されます。
検索タブにして、検索する文字列に
「*横浜市*」と入力して、
すべて検索ボタンをクリックしましょう。
B3:B5の3件を検索することができました。
B2=”*横浜市*”という論理式を使ったIF関数をつくれば、
OKなような気がしますが、ここに落とし穴というか、
IF関数の盲点があるのです。
【IF関数の論理式にワイルドカードが使えない!】
E2にIF関数を作ってみましょう。では、OKボタンをクリックして、
数式をオートフィルでコピーしましょう。
すると、すべて×。
つまり該当したデータは”ない”と判断されたわけです。
検索では上手くいっていたいのに…
論理式を、B2=*&"横浜市"&*と比較演算子のようにしてもダメです。
エラーになります。
どうやら、論理式に、ワイルドカードが使えないようなのです。
では、B5のようなケースには対応することができないのでしょうか?
【COUNTIF関数が救世主】
このワイルドカードが使えないのは、実はすべての関数ではないのです。例えば、COUNTIF関数では、ワイルドカードが使えるのです。
E2に作った数式は、
=COUNTIF(B2,"*横浜市*")
この数式をオートフィルでコピーすると、0と1が算出されます。
1がTRUEで0がFALSEということですが、
ワイルドカードが使えて、しかも、判断もしていることがわかります。
そこで、IF+COUNTIF関数のネストにすることで、
今回の問題は一挙に解決します。
E2には、
=IF(COUNTIF(B2,"*横浜市*"),"○","×")
という数式が設定されています。
この数式をオートフィルを使ってコピーすれば、
横浜市という文字が入っていれば○と判断することができました。
このように、統一してある場合は、LEFTやMID関数でも対応できますが、
もし、決まっていない場合は、
IF+COUNTIF関数のネストにワイルドカードを使うことで、
文字列が含まれているかを判断することができますので、
知っておくと便利かもしれません。