-
「条件Aがn1のとき処理X1、n2のとき処理X2、n3のとき処理X3、それ以外のとき処理X4」
=IF(A=n1,X1,IF(A=n2,X2,IF(A=n3,X3,X4)))
条件に3っつ以上の分岐が発生するときはIF関数の中にIF関数が入る形(入れ子=ネスト)
にすることで処理します。
関数の引数として他の関数を使用することを入れ子にする(ネストする)といいますが、
入れ子は(どの関数であっても)7レベルまで可能です
ネストレベル(HINT)。
(それを超える場合はエラーになるので別の方法をとる必要があります)
【例】A1が0なら×、1なら△、2なら○、それ以外は◎
=IF(A1=0,"×",IF(A1=1,"△",IF(A1=2,"○","◎")))
ただし、次のような例は少し気をつける必要があります。
【例】A1が0以上の時×、1以上の時△、2以上の時○、それ以外は◎
【誤】=IF(A1>=0,"×",IF(A1>=1,"△",IF(A1>=2,"○","◎")))
この例では0以上の数値を入力した場合、全て×が表示されてしまい、
所期の分岐をしてくれません。この例では下記のように書くべきです。
【正】=IF(A1>=2,"○",IF(A1>=1,"△",IF(A1>=0,"×","◎")))
分岐条件の数値範囲がダブるような場合には範囲が狭いほうを先に分岐させなければなりません。
- 「A 、 B 、 C が全て n であれば処理 X、そうでなければ処理 Y」
=IF(AND(A=n,B=n,C=n),X,Y)
複数の条件を全て満たすときと、そうでない場合を分岐させたいときは
AND関数で複数条件を判断します。
AND関数はAND(引数1,引数2,...)で、
引数が全てTRUEならばTRUEを、ひとつでもFALSEがあればFALSEを返します。
【例】「C3もC4もC5も0より小さければ0、そうでなければ1」
=IF(AND(C3<0,C4<0,C5<0),0,1)
AND関数の引数を全て満たしたときにTRUEの処理「0」、
ひとつでも満たせないものがあればFALSEの処理「1」を返します。
- 「AまたはBがn1であれば処理X、そうでなければ処理Y」
「AまたはB」という論理判断はOR関数を使用します。
=IF(OR(A=X,B=X),Y,Z)
OR(引数1,引数2,...)
OR関数の引数には通常、論理値(TRUEまたはFALSE)のかえる数式を用います。
引数がひとつでもTRUEならばTRUEを、全てFALSEの時のみFALSEを返します。
【例】D1=B1-A1-C1だが、A1かB1どちらかが空白か0の時D1は空白とする
=IF(OR(A1=0,B1=0),"",B1-A1-C1)
- 「Aがn1以上n2未満のとき処理X、それ以外のとき処理Y」
この命題をそのままIF関数に当てはめて
【誤】 =IF(n1<=A<n2,X,Y)
このように数式を書くとエラーにはなりませんが残念ながら思うとおりの動作はしてくれません。
試しにどこかのセルへ「=2<=A1<5」と入力してみてA1のセルの値を変化させてみても
「FALSE」しか返って来ません。
数学的には間違った書き方ではありませんが、Excelは範囲条件式が正しく判断できません。
「A1>=2」が正しいか、「A1<5」が正しいか、をそれぞれ判断させてやる必要があります。
エクセルでは「ある範囲の値かどうか」をひとつの論理式では表せないことは覚えましょう
【正】 =IF(AND(A>=n1,A<n2),X,Y)
AND関数は引数を全て満足する場合TRUEを返します。
下記数式例では、「セルA1が2以上」がTRUEで、なおかつ「セルA1が5未満」がTRUEのとき、
AND関数でTRUEが返り、IF関数での「真」の場合の処理をします。
【例】
=IF(AND(A1>=2,A1<5),"○","×")
- 「AがnかつBがnのとき処理X、AがnまたはBがnのとき処理Y、それ以外は処理Z」
=IF(AND(A=n,B=n),X,IF(OR(A=n,B=n),Y,Z))
命題通りの条件判断は、上記のようになります。
ここで、ANDとORの順番を逆にして、
【誤】 =IF(IF(OR(A=n,B=n),Y,AND(A=n,B=n),X,Z))
としてしまうと、「AがnかつBがnのとき」も処理Yを実行してしまうので注意が必要です。
OR関数は「引数のどれか、または全てがTRUEのとき」TRUEを返すので、
「AがnかつBがnのとき」もOR関数の条件判断でTRUEと判断されてしまいます。
条件判断を複数重ねていくときは「条件が狭いものを先に記述していく」事が必要になります。
また、発想を変えて、
=IF(AND(A=n,B=n),X,IF(AND(A<>n,B<>n),Z,Y))
「AがnかつBがnのとき」「Aがnでなく、かつBもnでないとき」のどちらにも当てはまらない場合が
「AがnまたはBがnのとき」であると読み替える事ができるので
このような書き方をすることができます。
- 参考
AND関数、OR関数を使わなくても、論理式の乗算、加算で同じ結果を得ることができます。
【AND条件の場合】
=IF(AND(A=n,B=n,C=n),X,Y)
これは次のように書き換えることができます。
=IF((A=n)*(B=n)*(C=n),X,Y)
「(A=n)*(B=n)*(C=n)」の部分で「論理値の乗算」を行っています。
「(A=n)」「(B=n)」「(C=n)」のそれぞれの式で「TRUE」「FALSE」の結果が返りますが、
すべてが条件を満たす(TRUE)なら、
(A=n)*(B=n)*(C=n)・・・・・TRUE*TRUE*TRUE=TRUE
また、ひとつでも条件を満たさないものがあると、例えばCがn以外であった場合、
(A=n)*(B=n)*(C=n)・・・・・TRUE*TRUE*FALSE=FALSE
となり、(A=n)*(B=n)*(C=n)は偽となります。
つまり、AND(A=n,B=n,C=n)と書いた場合と結果が同じになります。
【OR条件の場合】
=IF(OR(A=n,B=n,C=n),X,Y)
OR関数でも次のような式で同様の結果が得られます。
=IF((A=n)+(B=n)+(C=n),X,Y)
「(A=n)+(B=n)+(C=n)」の部分で「論理値の加算」を行っています。
「(A=n)」「(B=n)」「(C=n)」のそれぞれの式で「TRUE」「FALSE」の結果が返りますが、
全てが条件を満たさない(FALSE)の時だけ、つまりA、B、Cが全てnでない時には
(A=n)+(B=n)+(C=n)・・・・・FALSE+FALSE+FALSE=FALSE
また、ひとつでも条件を満たすものがあると、例えばCがnであった場合、
(A=n)+(B=n)+(C=n)・・・・・FALSE+FALSE+TRUE=TRUE
となり、(A=n)+(B=n)+(C=n)は偽となります。
つまり、OR(A=n,B=n,C=n)と書いた場合と結果が同じになります。
論理値の足し算は、TRUEにいくつTRUEやFALSEを足してもTRUEです。