IFのネストよ、さようなら
IFSとSWITCH
今回取り上げる関数は、IFS関数とSWITCH関数です。
比較的新しい関数で、まだ浸透していないように思いますが、非常に便利な関数で、これが使えるだけで業務が一気に効率的に進むようになる場合があります。
条件分岐で結果を入力する
そんなIFSとSWITCH関数ですが、Excelでは、条件分岐を使ってリストを作る業務が非常に多いです。
これらの関数は、そこで一定の効力を発揮することが想定されています。
例えば、次のような取引先に関する情報があるとして、担当エリアと取引規模に応じて、担当者にボーナスを渡さないといけないとします。
仮にこの時の条件が下記のような場合、ボーナスの対象かどうかの結果を入れるF列には、その内容に合わせた条件式を入れる必要が出てきます。
- 首都圏エリアの場合、取引金額が150,000以上だと、ボーナスは1,000
- 首都圏エリアの場合、取引金額が100,000以上だと、ボーナスは500
- 東北エリアの場合、取引金額が30,000以上だと、ボーナスは1,000
- 東北エリアの場合、取引金額が20,000以上だと、ボーナスは500
IFを使った場合
これをIFを用いた場合、書き方にもよりますが、次のような手順で考えなければいけません。
- 担当エリアが首都圏か東北かで判断基準を変更する
- 首都圏の場合、取引金額が150,000以上ならボーナスを1,000とする
- 首都圏の場合、取引金額が100,000以上ならボーナスを500とする
- 東北の場合、取引金額が30,000以上ならボーナスを1,000とする
- 東北の場合、取引金額が20,000以上ならボーナスを500とする
これを実際にF2セルに式を入れるとすると、次のようになります。
=IF(B2=”首都圏”,IF(C2>=150000,1000,IF(C2>=100000,500,0)),IF(B2=”東北”,IF(C2>=30000,1000,IF(C2>=20000,500,0))))
一見して何を言っているのやら、という感じですが、わかりやすく改行などを入れながら表記すると次のようになります。
=IF(B2=”首都圏”,
IF(C2>=150000,1000,
IF(C2>=100000,500,
0)),
IF(B2=”東北”,
IF(C2>=30000,1000,
IF(C2>=20000,500,
0))
))
このような式を、例えば他人に読み解いてもらいながら、月によってボーナスの基準を変えるなんてことをしていれば、訳が分からなくなってしまいます。
他人が見ることを前提とするなら、IFはネストしない方が良い
このように、IFの中にIFを入れるようなことを、システム用語で「ネストする」などと言います。
他人が式の中まで見ながら、どういった場合にどのような対応をするかを考えるのであれば、IFをネストするべきではありません。必要以上に長くなってしまいますし、何より読みにくいです。
読みにくいコードは、ミスの元ですし、何よりどこでミスが生じているかがわからなくなってしまう危険性が極めて高いです。
IFSとSWITCH
そこで、新関数IFSとSWITCHが出てきます。
いずれも、2019年以降のMicrosoft製品およびそれ以降のOffice365で使えるようになった、新関数です。
IFS関数の解説
IFS関数の使い方は、構文で示すと次の通りです。
=IFS(条件1,条件1がTrueの場合の戻り値,条件2,条件2がTrueの場合の戻り値…)
通常のIF関数だと、条件は一つでしたが、複数の条件を設定し、それらの条件のうち、最初にTrueとなった条件式のすぐ後に設定された戻り値を返します。
条件はいくつも設定でき、いずれの条件にも該当しなかった場合は、一番最後の戻り値の後ろに設定された値が返されます。
なので例えば、B列に書かれた点数に関して、80点以上は「優」、70点以上は「良」、60点以上は「可」、それ以下は「不可」と返したいといった場合、C2に条件式を入れるとすると、
=IFS(B2>=80,”優”,B2>=70,”良”,B2>=60,”可”,”不可”)
となります。
SWITCH関数の解説
これに対して、SWITCH関数は、構文で示すと次の通りになります。
=SWITCH(セル,値1,セルが値1だった場合の戻り値,値2,セルが値2だった場合の戻り値…)
IFS関数と違って、いちいち条件式を入れる必要はありません。ただし、見に行くセルが設定した値になっているかどうかのみを判定するため、上の例のような、~以上や~以下といった設定をすることはできません。
これが活躍する場は少し限られてしまいますが、見に行くセルが固定されており、その値が設定するものと一致するかどうかのみを判定する場合には、いちいち見に行くセルの名前を条件式として記載する必要がないので、式がシンプルになります。
先ほどの例を考える
先ほどの例を、IFSとSWITCHを使って考えてみると、次のようになります。
まず、担当エリアが首都圏か東北かで基準が変わるわけですから、
=SWITCH(B2,”首都圏”,[首都圏用の条件],”東北”,[東北用の条件])
とするとスッキリと表現できます。
さらにそれぞれの条件を作る際にIFSを使って、例えば首都圏の場合、
=IFS(C2>=150000,1000,C2>=100000,500,0)
とスッキリと表現することができます。
これらを組み合わせると、次のような式で表せます。
=SWITCH(B2,
”首都圏”,
IFS(C2>=150000,1000,C2>=100000,500,0) ,
”東北”,
IFS(C2>=30000,1000,C2>=20000,500,0)
)
条件表と判定列を作るべき
とはいえ、ほかの人が見ることを考慮したとき、もっと効率的なやり方がないわけではありません。
実際、IFSやSWITCHを使っても、関数の中に関数を入れなければならないのは変わりません。
上ではわかりやすく改行やインデントを入れているので見やすいですが、並べて式だけ記載すると、やはり解読には時間を要してしまいます。
また、外部にファイル送信をすることを前提としている場合、IFSやSWITCHが相手のExcelで開くとは限らず、使うべきではない場合も存在します。
ここまでの分岐があるのであれば、条件表と判定列を作り、VLOOKUPなどで結果を入力するべきです。細かい設定の仕方などは下の記事を参考にしてもらうとして、簡単にイメージだけ解説しておくと、下記のような形で条件表と判定列を作り、それを基に結果を入力するということです。
これなら、どういった条件で結果を入れているかがわかりやすく、ほかの人が見たとしても、何をしようとしているか一目瞭然です。
さいごに
IFをネストしたり、IFSやSWITCHは、それ自体使うべきではない手法ということは考えていません。
使い慣れていれば絶対に使いやすいですし、自分だけが見るExcelだったり、解読する人のExcel技術が高い場合などは、これらを使うことは、むしろスピードを高め、良い結果をもたらします。
- バージョンの古いExcelで開くことが前提となっている場合、IFSやSWITCHは使わない
- あまりに多い条件分岐は、IFSやSWITCHなどでまとめる
- IFSやSWITCHを使ってもわかりにくい場合や条件表と判定列を使う
コメント