いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)IF関数で複数条件(AND,OR,多分岐)を指定する方法

 GoogleスプレッドシートのIF関数を使って、複数条件(AND,OR)を設定する方法について紹介します。
 また、結果を3種類以上に分岐(多分岐)させたい場合の方法についても併せて紹介します。

  • IF関数とAND関数を併用してAND条件(かつ)を設定できます。*演算子を併用する方法もあります。
  • IF関数とOR関数を併用してOR条件(または)を設定できます。+演算子を併用する方法もあります。
  • IF関数を入れ子(ネスト)にすれば3つ以上の結果に場合分けできます。これはIFS関数で代用可能です。

AND条件(かつ)の場合

AND関数を併用する方法

 次の画像のE3セルの式は「C3セルの値が80以上かつD3セルの値が80以上なら『合格』、そうでない場合は『不合格』を表示する」という内容の式です。
 また、式を下方にフィルコピーして同様に各受験者の点数を判定しています。

 E3セル(下方にコピー)

=IF(AND(C3>=80,D3>=80),"合格","不合格")

 IF関数の第1引数(条件)として「AND(C3>=80,D3>=80)」を指定しています。これにより「C3>=80」と「D3>=80」の2つの条件がともに真(TRUE)である場合に第1引数が真とみなされ、それに対応する「合格」が返されます。そうでない場合は「不合格」が返されます。
 対象となる条件が3つ以上の場合は「AND(B3>=80,C3>=80,E3>=80)」のように条件をカンマで区切って増やせばOKです。



 1つの注意点として、さらにARRAYFORMULA関数を併用して参照範囲を下方に拡大すれば、すべての受験者に対する判定結果を一括して取得できるのではないかと思われますが、これはできません。
 次の画像は実際にやってみた結果ですが、値が1つしか得られず、しかもC3,D3セルの点数に対する判定結果としても誤ったものになっています。

 E3セル(失敗)

=ARRAYFORMULA(IF(AND(C3:C7>=80,D3:D7>=80),"合格","不合格"))

 AND関数は参照範囲を拡大しても1つの値(TRUEまたはFALSE)しか返さない関数なので(この点はSUM関数などと同様)このような結果になります。

*演算子を併用する方法

 次の画像のE3セルの式では、AND関数の例と同様に「C3セルの値が80以上かつD3セルの値が80以上なら『合格』、そうでない場合は『不合格』を表示する」ということを行っています。ただしAND関数の代わりに「*」演算子を使っているところがポイントです。
 また、式を下方にフィルコピーして各受験者の点数を判定しています。

 E3セル(下方にコピー)

=IF((C3>=80)*(D3>=80),"合格","不合格")

 IF関数の第1引数(条件)を「(C3>=80)*(D3>=80)」としています。この式は各条件が真(TRUE)なら1、偽(FALSE)なら0とみなした掛け算を行います。
 よって両方の条件が真なら1*1=1という結果になり、それ以外の場合は0(1*0=0、0*1=0、0*0=0のいずれか)となります。
 IF関数は0以外の数値をTRUEとみなすので、結果的に2つの点数がともに80以上なら「合格」、そうでない場合は「不合格」となります。
 対象となる条件が3つ以上の場合は「(B3>=80)*(C3>=80)*(D3>=80)」のように各条件をカッコで囲んで*でつなげばOKです。
 


 *演算子を用いる1つのメリットはARRAYFORMULA関数を併用して一括判定ができることです。
 次の画像では*演算子とARRAYFORMULA関数を併用して、1つの式ですべての受験者の判定結果を一括して取得しています。

 E3セル

=ARRAYFORMULA(IF((C3:C7>=80)*(D3:D7>=80),"合格","不合格"))

 この式ではAND関数の例と異なり、各行ごとに掛け算が実行されて1または0の値が得られます。これを利用して判定結果を一括取得できるというわけです。

OR条件(または)の場合

OR関数を併用する方法

 次の画像のE3セルの式は「C3セルの値が80以上またはD3セルの値が80以上なら『合格』、そうでない場合は『不合格』を表示する」という内容の式です。

 E3セル(下方にコピー)

=IF(OR(C3>=80,D3>=80),"合格","不合格")

 IF関数の第1引数(条件)として「OR(C3>=80,D3>=80)」を指定しています。これにより「C3>=80」と「D3>=80」の2つの条件のいずれかが真(TRUE)である場合に第1引数が真とみなされ、それに対応する「合格」が返されます。そうでない場合は「不合格」が返されます。
 対象となる条件が3つ以上の場合は「OR(B3>=80,C3>=80,E3>=80)」のように条件をカンマで区切って増やせばOKです。

+演算子を併用する方法

 次の画像のE3セルの式では、OR関数の例と同様に「C3セルの値が80以上またはD3セルの値が80以上なら『合格』、そうでない場合は『不合格』を表示する」ということを行っています。ただしOR関数の代わりに「+」演算子を使っています。

 E3セル(下方にコピー)

=IF((C3>=80)+(D3>=80),"合格","不合格")

 IF関数の第1引数(条件)を「(C3>=80)*(D3>=80)」としています。この式は各条件が真(TRUE)なら1、偽(FALSE)なら0とみなした足し算を行います。
 よって両方の条件が真なら1+1=2という結果になり、一方のみ真なら1という結果になります(1+0=0、0+1=0のいずれか)。どちらも偽なら0+0=0となります。
 IF関数は0以外の数値をTRUEとみなすので、結果的に2つの点数のどちらかが80以上なら「合格」、そうでない場合は「不合格」となります。
 対象となる条件が3つ以上の場合は「(B3>=80)+(C3>=80)+(D3>=80)」のように各条件をカッコで囲んで+でつなげばOKです。


 OR関数を使った場合はARRAYFORMULA関数を併用しても一括判定ができませんが(AND関数の例と同様)、+演算子の場合は可能です。
 次の画像では+演算子とARRAYFORMULA関数を併用して、1つの式ですべての受験者の判定結果を一括して取得しています。

 E3セル

=ARRAYFORMULA(IF((C3:C7>=80)+(D3:D7>=80),"合格","不合格"))

 各行ごとに足し算が実行されて2,1,0のいずれかの値が得られます。これを利用して判定結果を一括取得できるというわけです。

結果を3種類以上に分ける場合(多分岐)

IF関数を入れ子(ネスト)にする方法

 IF関数では条件が真(TRUE)か偽(FALSE)かを判定し、対応する値を返します。つまり普通に使うと2種類の結果しか設定できません。
 そこで、次の画像ではIF関数を重ねて使う、つまり入れ子(ネスト)にすることで判定結果を3種類(A,B,C)に場合分けしています。

 D3セル(下方にコピー)

=IF(C3>=90,"A",IF(C3>=80,"B","C"))

 外側のIF関数によりC3セルの点数が90点以上だったら「A」が返されます。
 一方でそうでない場合(90点未満)には特定の値が返るのではなく、内側のIF関数が実行されます。これにより80点以上なら「B」が、そうでない場合(80点未満)は「C」が返るという仕組みです。



 ちなみにこのD3セルの式の内容をフローチャートに表すと次のようになります。
 分岐を4つ、5つと増やすためにはIF関数を3重、4重にする必要があり、式も見づらいものになっていきます。

IFS関数を使用する方法

 次の画像では、IFS関数を使うことで上記の例と同じように結果を3種類に場合分けしています。

 D3セル(下方にコピー)

=IFS(C3>=90,"A",C3>=80,"B",TRUE,"C")

 IFS関数は「条件と値の組を最初から順番にチェックし、最初に真(TRUE)と判定された条件に対応する値を返す」という関数です。
 この式の場合、例えば92点であれば最初の条件「C3>=90」が真となるのでそれに対応する「90」が返りますし、84点であれば2番目の条件「C3>=80」が真となるので「80」が返ります。
 なお3番目の条件「TRUE」というのは、「いずれの条件にも該当しない」という条件を設定するものです。これにより80点未満の場合に「C」が返ります。



 D3セルのIFS関数を使った式の内容をフローチャートに表すと次のようになります。
 IF関数を入れ子にする方法だと分岐が増えるにつれて入れ子が深くなり式が複雑になりますが、IFS関数を使えば入れ子が不要なので式がフラットで見やすいものになることがこのチャートからもわかります。



 なお、IFS関数ではIF関数にはない「TRUE」の設定が独特ですが、これを含めたIFS関数の詳細について次の記事で紹介していますので参考まで。

www.officeisyours.com

www.officeisyours.com