いまさら聞けないExcelの使い方講座

【Excel】IF関数 vs IFS関数 vs SWITCH関数! 効率的にエラーを処理できるのはどれ?

条件を判定する関数の違いとは?

定番の処理はどの関数が使いやすい?

 数式が入力されている表の中に必要なデータを埋めていく作業がありますよね。集計表や見積表などで前年比を求めたり、VLOOKUP/XLOOKUP関数のように検索値に対応する値を取り出したりするケースです。

上半期と下半期の売上を入力すると、増減率が自動的に計算できる表です

 この例では「アート文化事業」を下半期から始めたため、上半期の売上は「0」増減率は「#DIV/0!」エラーが表示されています。「0」を割ってしまっているというエラーです。「その他事業」の下半期は未入力のため、「-100.00%」となっています。

 このままでも問題ありませんが、エラー値や未集計の部分は空白にしたいこともあるでしょう。IF関数を利用して“空白”や「0」を表示させるのが定番の処理です。IF関数以外に、IFS関数やSWITCH関数を使うこともできます。

 どの関数でも同様に処理できますが、自分に合うものを探してみてはいかがでしょうか。エラー処理をしたい時の参考にしてみてください。今回は、IF/IFS/SWITCH関数を使った処理を見比べてみます。

エラーをIF関数で処理する

 上記の例では、セルD2には増減率を求める「=(C2-B2)/B2」という数式が入力してあります。計算の対象はセルB2とC2で、セルの内容が空白、または「0」なのかの判断はしていないため、エラー値や不自然な結果が表示されています。

 これらの問題を回避できる最も定番の数式は「=IF(OR(B2="",C2=""),"",(C2-B2)/B2)」となります。OR関数は引数に指定した「B2=""」と「C2=""」のいずれかを満たせば「TRUE」を返します。

 「セルB2、もしくはC2が空白なら」という条件となります。満たす場合は空白("")、満たさなければ(どちらのセルも空白でなければ)「(C2-B2)/B2」の数式の結果を表示します。

セルD2に「=IF(OR(B2="",C2=""),"",(C2-B2)/B2)」と入力します(①)
数式をコピーしました。セルD5は「#DIV/0!」エラーが表示されたままです(②)

 セルD5は「#DIV/0!」エラーが表示されたままです。セルB5は「0」、セルC5は「974」と入力されているため、「セルB5、もしくはC5が空白なら」の条件を満たさずに「(C2-B2)/B2)」が計算された結果です。正しい動作です。

 この状況を回避するには、B列の“割られる値”が「0」でないという条件が必要です。OR関数に1つ条件を追加しましょう。

セルD5の数式は「=IF(OR(B5="",B5=0,C5=""),"",(C5-B5)/B5)」(③)となります。「#DIV/0!」エラーを非表示にできました

条件を羅列できるIFS関数

 IFS関数使って同様の処理を再現してみましょう。IFS関数は複数の条件を指定できるため、OR関数を組み合わせる必要がなく、IF関数よりわかりやすいでしょう。IFS関数の構文は以下の通りです。

IFS関数の構文。[論理式1]を満たせば[真の場合1]、[論理式2]を満たせば[真の場合2]...、とセットで指定します。[論理式]と[真の場合]のセットは127個まで指定可能です。どの条件も満たさない場合は「TRUE」に続けて「真の場合」を指定します

 どの条件にもあてはまらない場合として「TRUE」と数式を指定します。セルD2の数式は以下のようになります。条件は前から順番に判定されていきます。

=IFS(B2="","",B2=0,"",C2="","",TRUE,(C2-B2)/B2)

セルD2に「=IFS(B2="","",B2=0,"",C2="","",TRUE,(C2-B2)/B2)」(④)と入力して、数式をコピーしてあります

SWITCH関数は複数セルの判定には向かない

 今度はSWITCH関数を使ってみます。構文は以下の通りです。

SWITCH関数の構文。「式」と「値1」が一致すれば「結果1」、「値2」と一致すれば「結果2」...、と指定します。最後の引数[既定の結果]は、どの[値]にも一致しなかった場合に表示する結果を指定します

 実は、複数のセルを対象にした条件判定にSWITCH関数は向きません。あるスコアに対して評価を切り替えるといった1つのセルの値を複数の値と比較する時におすすめの関数です。

 今回の例では「セルB2とC2のいずれかが空白、セルB2が「0」の場合」といった条件なので、数式は少し複雑になります。

 IF関数の数式と似ていますね。OR関数の結果は「TRUE」もしくは「FALSE」で返されるので、引数[式]に指定する「OR(B2="",B2=0,C2="")」の結果が「TRUE」なら、空白("")を表示、それ以外(FALSE)なら「(C2-B2)/B2)」を計算するとしました。

=SWITCH(OR(B2="",B2=0,C2=""),TRUE,"",(C2-B2)/B2)

セルD2に「=SWITCH(OR(B2="",B2=0,C2=""),TRUE,"",(C2-B2)/B2)」(⑥)と入力して、数式をコピーしてあります

「""」を置き換えれば「0」と表示可能

 IF/IFS/SWITCH関数を使って、エラー値と不自然な値を空白にしてみました。空白ではなく「0」と表示したい時は、結果として表示する「""」を「0」に置き換えます。以下にまとめて紹介しておくので参考にしてみてください。条件の「""」と混同しないように注意しましょう。

=IF(OR(B2="",B2=0,C2=""),0,(C2-B2)/B2)
=IFS(B2="",0,B2=0,0,C2="",0,TRUE,(C2-B2)/B2)
=SWITCH(OR(B2="",B2=0,C2=""),TRUE,0,(C2-B2)/B2)