8/09/2018

Excel。IF関数の盲点。論理式にワイルドカードが使えないのでどうしたらいい?【Wildcard】

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関数のネストにワイルドカードを使うことで、
文字列が含まれているかを判断することができますので、
知っておくと便利かもしれません。