条件分岐の関数4つの使い分け

2018.02.21関数

Excelには[IF関数]に代表される条件分岐の関数が、使用用途ごとにたくさん用意されています。
個別の関数の使い方は分かっても、どのようなケースでどの関数を使うか選択する時に悩むことがあるかもしれません。
今回はそのような関数を特徴ごとにわけ、どんなケースで使い分けていくかを紹介します。

IF関数

[IF関数]は条件分岐の中でも最も基本の関数です。
[条件式]の結果によって、その条件が成立していれば1つ目の選択肢、成立していなければ2つ目の選択肢に分岐させるという関数です。
書式は次の通りです。
=IF(条件式,選択肢1,選択肢2)
もしもセルA2の数値が「500円」以上の場合、「定価以上」、そうではない場合、「○割引」と表示する場合は次の計算式です。
=IF(A2>=500,"定価以上",TEXT((500-A2)/500*10,"0割引"))

IF関数

 

IF関数は二つの分岐にしか使えませんが、関数の中にIF関数を入れて行くことにより、3分岐、4分岐という分岐を増やしていくことができます。
4分岐の場合の書式は次の通りです。
=IF(条件式,選択肢1,IF(条件式,選択肢2,IF(条件式,選択肢3,選択肢4)))
もしもセルA2の数値が「0円」なら「無料」、「500円」なら「定価」、「500円」より高かったら「定価より高い」、そうではない場合、「○割引」と表示する場合は次の計算式です。
=IF(A2=0,"無料",IF(A2=500,"定価",IF(A2>500,"定価より高い",TEXT((500-A2)/500*10,"0割引"))))
このように分岐が多くなると、複雑な式になります。
IF関数の中に入れられるIF関数の数はExcel2016で最大64個です。

IFS関数

[IF関数]で、多くの分岐をする計算式を作成すると、複雑な式になりますが、それを単純な式として作成するための関数として[IFS関数]があります。
IFS関数の書式は次の通りです。
=IFS(条件式1,選択肢1,条件式2,選択肢2,条件式3,選択肢3,…)
関数の引数は、[条件]と[選択肢]が交互に入っていくという構造になっています。
[条件式1]が成立したら、[選択肢1]を答えとして、[条件式2]以降の結果を調べることはありません。

次の一覧表で購入金額元の割引率を求めるには[VLOOKUP関数]を使うのが最も簡単です。その場合の計算式は次の通りです。
=VLOOKUP(A8,A2:B5,2,TRUE)
なお、VLOOKUPの書式は以下になります。
=VLOOKUP(検索する値,検索する範囲, 取り出したい列,検索方法の指定)
検索方法の指定は、FALSEにすると、データが見つからなかったら「#N/A」エラーが表示されます。TRUEにすると、データが見つからなかったら、検索する値を超えない値の中から最大値を表示します。TRUEの場合は検索する範囲の最左の列を小さい順に並べ替えておく必要があります。

VLOOKUP関数

 

しかしVLOOKUP関数の場合、特殊な場合を除き、[一覧表]の範囲を設定しておく必要があります。
そこで、一覧表を作成せずに同じことをする数式をIFS関数で作成することができます。
その場合の計算式は次の通りです。
=IFS(A1<5000,0%,A1<20000,3%,A1<50000,5%,A1=50000,10%)

IFS関数

 

IFS関数では、条件と選択肢が交互に入っていきますが、IFS関数の条件や選択肢にIF関数を使う、次のような数式の場合、一目ではどのような計算式か判断できなくなるということがあります。
=IFS(A1<5000,IF(A2<5000,0%,1%),A1<20000,IF(A2<5000,3%,4%),A1<50000,5%,A1>=50000,10%)
また、IF関数では条件に当てはまったら当てはまらなかったらという条件で選択肢を選択することができたのですが、IFS関数は、条件が成立した場合の選択肢のみ設定ができるので、最後の条件が成立しなかった場合の選択肢を設定することができません。
そこで、最後の条件に、「TRUE」と設定することで必ず条件が成立すると言う設定をし、その次の引数として、最終的にどの条件に当てはまらなかった時の選択肢を記述します。
=IFS(条件式1,選択肢1,条件式2,選択肢2,...最後の条件式,最後の選択肢,TRUE,当てはまらなかった時の選択肢)
IFS関数はExcel2016では127個まで分岐できます。

CHOOSE関数

[CHOOSE関数]は1つ目の引数を番号として、2つ目以降の番号に対する引数に分岐する関数です。
CHOOSE関数の書式は次の通りです。
=CHOOSE(番号,選択肢1,選択肢2,選択肢3,…)
セルA1に日付を入力すると、その日付に対する、陰暦の月名を表示するには次の計算式です。
=CHOOSE(MONTH(A1),"睦月","如月","弥生","卯月","皐月","水無月","文月","葉月","長月","神無月","霜月","師走")

CHOOSE関数

 

分岐は条件式ではなく、あくまで数式で判断されるので数式はシンプルになります。
ただし、1つ目の数式の番号は1から始まる数値である必要があります。
また条件に当てはまらない番号を指定した場合、エラーになります。
それを防ぐためには、IFERROR関数でCHOOSE関数を囲み、想定外の値が入力されたことを伝えるメッセージを表示します。
IF関数のように選択肢の番号が入力された場合という条件を入れたい場合は、IF関数でCHOOSE関数を囲みます。
選択肢が三つの場合は、番号は1から3までの数値しか指定できません。
そこで、セルA1に「1」と入力されたらセルA2に「100」を足す、「2」と入力されたらセルA2から「100」を引く、「3」と入力されたらセルA2に「100」をかける、それ以上の時はA2の値をそのまま表示する、セルAが「0」以下の場合は「入力ミス」を表示する計算式は次の通りです。
=IFERROR(IF(A1>3,A2,CHOOSE(A1,A2+100,A2-100,A2*100)),"入力ミス")

CHOOSE関数のエラー回避

 

CHOOSE関数はExcel2016では、最大254個の分岐ができます。
もしも番号が0から始めたい場合は、次の数式のように、第1引数から「1」を引くという方法もあります。
=CHOOSE(A1-1,A2+100,A2-100,A2*100)
「1」と「2」が選択肢1,「3」と「4」が選択肢2とするのであれば、次の数式のように、第1引数を計算するという方法もあります。
=CHOOSE((A1-1)/2+1,A2+100,A2-100)
CHOOSE関数の第1引数は、自動的に小数点以下を切り捨てて計算するので[INT関数]などで切り捨てる必要はありません。

SWITCH関数

[SWITCH関数]は最近追加された関数です。
CHOOSE関数はあくまで1から始まる連番の数字の番号でしか分岐することができませんでしたが、SWITCH関数は、文字や連続しない数字でも分岐することができます。
書式は次の通りです。
=SWITCH(比較するもの,答え1,選択肢1,答え2,選択肢2,答え3,選択肢3,…)
第1引数に、比較するもの、第1引数に比較するものの答え1、答え1の時の選択肢1、以降、比較するものの答えとそれに対する選択肢を交互に入力していきます。
IFS関数では一回一回比較する式を作らなければなりませんでしたが、SWITCH関数では、条件の左辺を第1引数に設定すれば、以降、その右辺のみ入力すればよく、計算式をシンプルにすることができます。
ただし、以上、以下のように一致していない数値を検索することはできません。
さらに、注意しなければならないのは、比較するものの答えのどれにも該当しない場合、エラーとなります。
その場合はSWITCH関数全体をIFエラー関数で囲み該当しなかった場合の答えを入力します。
もしも、お客様ランクが「A」なら割引率が「0%」、「B」なら「3%」、「C」なら「5%」、「D」なら「10%」とし、該当がなければ「ランクの入力が間違っています」と表示するのであれば、次の計算式になります。
=IFERROR(SWITCH(A2,"A",0%,"B",3%,"C",5%,"D",10%),"ランクの入力が間違っています")

SWITCH関数(エラー回避)

 

SWITCH関数はExcel2016では、最大126個の分岐ができます。

分岐関数の使い分け

今回は2分岐するIF関数、多数分岐するIFS関数、番号ごとに割り振るCHOOSE関数、値ごとに割り振るSWITCH関数の4つを紹介しました。

IF関数は、単純にそうか、そうではないかの分岐に使えるでしょう。IF関数の中にIF関数を入れることで2分岐以上の分岐ができますが、できれば3分岐くらいまでにしておいて、それ以上はIFS関数を使った方が使いやすいでしょう。
IF関数とIFS関数では、以上、以下などのその数値の大小でも比較できるのが特徴です。
さらに、条件に「なおかつ」「または」などの条件があり、[AND関数]や[OR関数]と組み合わせる場合もIF関数、IFS関数で数式を作らなければなりません。

また、一覧表に対する値を求めるのであれば、分岐の関数よりも[VLOOKUP関数]などを活用すると良いでしょう。

1から始まる番号に対する分岐をするならCHOOSE関数です。

連続していない数字や、文字列ごとに分岐させるならSWITCH関数です。

分岐数は限られますが、どんな分岐でも、この4つの関数の組み合わせで分岐させることができます。

分岐の式を作る時は、できるだけ条件はシンプルにした方がよいです。
=IF(A1>3,0,CHOOSE(A1,1,2,3,4,5))
という式の場合、「3,4,5」は絶対に分岐しないので、このような部分は削除します。

また、絶対に成立しない分岐を作ることもできてしまいます。
以下の数式でA1に入れると、100以上なら、10、500以下なら10、それ以外は0ということで、どんな数値でも100以上か500以下なので、10以外の答えになりません。
=IF(A1>=100,10,IF(A1<=500,10,0))
このような条件は前提となる条件自体を整理し、見直しましょう。

実は関数を組み合わせる際に注意しなければならないのは、関数の中に関数を入れられる数に制限があることです。
Excel2016で関数の中に入れられる関数は最大64個(計65個)までです。
次の計算式はIF関数が2つありますが、関数の中に関数が入っていないので、関数の中に関数の入っているレベルは0個です。
=IF(A1=1,1,2)+IF(A1=2,3,4)
次の計算式は、IF関数が3つありますが、IF関数の条件が成立した場合の中に1レベル、成立しない場合に別の1レベルがあるので、関数の中に関数の入っているレベルは1個です。
=IF(A1=1,IF(A2=1,3,4),IF(A3=1,5,6))
この関数の中に関数が入ることを「ネスト」と呼びます。
もし、そのネストのレベルが、Excelが扱える数を超えた場合は、別のセルなどに計算式を分けて対応しましょう。
分岐を多くすればするほどExcelに負担がかかります。計算速度が落ちたり、Excelが止まったりしてしまうことが多くなります。
なによりも数式が大変長くなり、可読性が悪くなります。
IF関数の中にIF関数を最大の64個入れた時、単純な条件式でも、次のような計算式になります。

ネスト数が64個の場合

分岐をできるだけしないテクニック

できるだけ分岐の数は少なくしましょう。
セルA1の番号によって、1,3,5,7とする場合は、CHOOSE関数で次の計算式にしたくなります。
=CHOOSE(A1,1,3,5,7)
しかし、次の数式を使えば分岐する必要がありません。
=(A1-1)*2+1
A1の値を1から2ステップで増やしていくという法則に着目し、A1の値に×2をしていくのですが、それだと2から始まってしまうので、もとのA1の値から1を引いたものに×2をし、0から始まるので最後に1を足すという計算式です。
2以上のステップの連番の作成ではよく使う計算式ですので覚えておくとよいでしょう。
このように単純な数式で表せる場合もあるので、よく条件を精査しましょう。

できるだけ数式はシンプルに

数式はできるだけシンプルにしておかないと、後から改造したり、間違いを見つけたりする時に大変です。
次の一覧表で、セルA1に対する文字をB列から選ぶときは、CHOOSE関数を使って次のような分岐の関数を考えます。
=CHOOSE(A1,B1,B2,B3,B4,B5)
しかし、分岐ではなく、行列関数としてINDEX関数を使えば、選択肢を範囲で指定できるので、数式がシンプルになります。
=INDEX(B1:B5,A1)

Excel業務をもっと「ラク」にするなら

Excel業務を自動化したい!
Excelをデータベース化したい!

 

Back to top