わえなび ワード&エクセル問題集

当サイトはWordとExcelの実力を鍛える最高水準の特訓問題集です。リンクを張るのは自由です。みんなで勉強しましょう!

【IF関数】3つの値を比較するときにA=B=C、A<B<Cと書いてはいけない理由

数学では3つの値が等しい場合に「A=B=C」という形の等式で表すことがあります。また、同様に3つの値の大小関係を「A<B<C」または「A>B>C」という形の不等式で表すことがあります。

しかし、Excelでは、3つ以上の値が連続する等式または不等式を記述することはできません。正確に言えば、このような論理式を記述することは可能ですが、数学とは異なる解釈になってしまいます。それは、2つの数で比較演算をすると論理値(TRUEまたはFALSE)になってしまうからです。

そこで、今回は、3つ以上の値を比較するときの論理式の記述の仕方と、3つの値が連続する等式または不等式を記述してはいけない理由について出題します。

目次

1.A=B=C

問題

A列、B列、C列のデータが全て等しい行を抽出しようとして、次の式を入力したところ正しく抽出されなかった。このようになる理由を述べたうえで、数式を修正しなさい。

  • =IF(A1=B1=C1,"すべて一致","")

f:id:waenavi:20201017120417j:plain

 

解説

(1)足し算で考えてみよう

例えば、A1、B1、C1を足したとします。

  • =A1+B1+C1

f:id:waenavi:20201017120742j:plain

 

この数式はプラスの記号(演算子)が2つあります。Excelには、足し算(+)・引き算(-)・掛け算(*)・割り算(/)・累乗(^)・文字列連結演算(&)といった演算子があります。

f:id:waenavi:20201017123534j:plain

 

同じ演算子が2個以上ある場合は、同時に計算するのではなく、左から順に計算する決まりになっています。

f:id:waenavi:20201017121008j:plain

 

つまり、「A1+B1」を先に計算し、その結果とC1を足し算します。その結果、3つの和を計算することができます。

f:id:waenavi:20201017121150j:plain

 

(2)比較演算子はうまくいかない

A列、B列、C列のデータが全て等しい行を抽出しようとして、論理式に「A1=B1=C1」と記述したとします。確かに、数学ではA1、B1、C1の3つの値が等しい場合は「A1=B1=C1」と表します。しかし、すべてFALSEになってしまいます。

  • =A1=B1=C1

f:id:waenavi:20201017121400j:plain

 

ところで、数式の途中にあるイコールは、比較のためのイコールであり演算子の一種(比較演算子)です(参考:【Excel】真と偽の意味と比較演算のメリットを知らずしてIF関数を語ってはいけない)。

f:id:waenavi:20201017123253j:plain

 

比較演算子は足し算と同じように、演算子が2つ以上ある場合は左の記号から順に演算をします。

f:id:waenavi:20201017123736j:plain

 

比較演算子の計算結果は論理値(TRUE・FALSE)です。つまり、A1とB1が等しい場合はTRUE、A1とB1が異なる場合はFALSEとなります。

f:id:waenavi:20201017125606j:plain

 

次に2番目のイコールを考えますが、「TRUE=C1」または「FALSE=C1」となりますので、C列に論理値を入力しない限り、原則として一致することはありません。したがって、常にFALSE(不一致)となり、偽の場合の値が表示されます。3つの値が等しくてもFALSEとなるのですからこのような記述の仕方は誤りであることが分かります。

f:id:waenavi:20201017133704j:plain

 

(3)ANDを使う

なぜ、このような結果になってしまうかと言うと、「A1=B1」の比較演算をすると、そのあとで「B1=C1」の判定をすることができなくなるからです。

ExcelでA1、B1、C1の3つの値が等しいことを表すには、2つに分けて記述しなければなりません。例えば、A1=B1とB1=C1に分けて、これらを両方満たす必要があるので、AND関数で1つにすればよいです(参考:【Excel】AND関数やOR関数を使うなら、まず「論理値を返す関数」であることを理解せよ)。

  • =IF(AND(A1=B1,B1=C1),"すべて一致","")

f:id:waenavi:20201017134653j:plain

 

別解その1

比較演算を用いる場合は掛け算をすればよいです。論理積は、両方TRUEの場合に積が1になります(参考:IF関数の条件に「等号や不等号が必要」と思っているなら、IF関数を勉強し直してほしい)。

  • =IF((A1=B1)*(B1=C1),"すべて一致","")

f:id:waenavi:20201017134720j:plain

 

別解その2

「すべて」を判定するときは個数を数えるのが鉄則です。連続する3つ以上のセルの値が一致することを判定するにはCOUNTIF関数を使います。

  • =IF(COUNTIF(A1:C1,A1)=3,"すべて一致","")

f:id:waenavi:20201017134914j:plain

 

2.A=B=X

問題

A列とB列の値の和を求めなさい。ただし、A列、B列が両方とも空白であれば空白にしなさい。

f:id:waenavi:20201017135017j:plain

 

解説

A列とB列の足し算をします。

  • =A1+B1

f:id:waenavi:20201017135342j:plain

 

ここで、A列とB列が空白であることを判定するのに「A1=B1=""」と記述したとします。A列、B列が両方とも空白であれば空白になるはずですが、空白にはなりません。これも誤りです。

  • =IF(A1=B1="","",A1+B1)

f:id:waenavi:20201017135539j:plain

 

「A1=B1=""」は、先に「A1=B1」の部分を先に判定します。その結果はTRUEまたはFALSEなので、「TRUE=""」「FALSE=""」となり、絶対に一致することはありません。したがって、常にFALSEとなり、このIF関数は全く機能していないことになります。

f:id:waenavi:20201017135703j:plain

 

この場合も2つに分けて、A列、B列がそれぞれ空白であることを判定しなければなりません。

  • =IF(AND(A1="",B1=""),"",A1+B1)
  • =IF((A1="")*(B1=""),"",A1+B1)

f:id:waenavi:20201017135804j:plain

 

別解

連続するセルがすべて空白であることを判定するには、COUNTA関数またはCOUNTBLANK関数を使ったほうが楽です。データの個数が1個以上、もしくは空白の個数を数えて2個であれば空白にします。

  • =IF(COUNTA(A1:B1),A1+B1,"")
  • =IF(COUNTBLANK(A1:B1)=2,A1+B1,"")

f:id:waenavi:20201017135849j:plain

 

3.A<B<C

問題

4月売上よりも5月の方が多く、さらに6月の方が多い行に○印をつけようとして、次の式を入力したところ正しく抽出されなかった。このようになる理由を述べたうえで、数式を修正しなさい。

  • =IF(A2<B2<C2,"○","")

f:id:waenavi:20201017143241j:plain

 

解説

A列のデータよりB列の方が大きく、さらにB列のデータよりC列の方が大きい行を抽出しようとして、論理式に「A1<B1<C1」と記述したとします。確かに、数学ではこのように表しますが、全てFALSEになってしまいます。

f:id:waenavi:20201017143408j:plain

 

ところで、数式の途中にある不等号も比較演算子です。比較演算子が2つ以上ある場合は左の比較演算子から順に演算をします(等号か不等号かを問いません)。

f:id:waenavi:20201017143648j:plain

 

そして、比較演算子の計算結果は論理値(TRUE・FALSE)です。つまり、A1よりB1の方が大きい場合はTRUE、そうでなければFALSEとなります。「TRUE<C1」または「FALSE<C1」となりますが、C列は数値なので比較すること自体無意味です。

f:id:waenavi:20201017145410j:plain

 

ちなみに、Excelでは論理値と比較をすると論理値のほうが大きいものと判定されるため、これらはFALSEとなり、偽の場合の値が表示されます。3つの値の大小関係を表すときに3つの値をつなげて不等式を記述するのは誤りです。

f:id:waenavi:20201017145215j:plain

 

なぜ、このような結果になってしまうかと言うと、「A1<B1」の比較演算をすると、そのあとで「B1<C1」の判定をすることができなくなるからです。Excelで「A1<B1<C1」の関係を表すには、2つに分けて記述しなければなりません。A1<B1とB1<C1に分けて、これらを両方満たす必要があるので、AND関数で1つにします。

  • =IF(AND(A1<B1,B1<C1),"○","")

f:id:waenavi:20201017150244j:plain

 

4.A>=X、B>=X

問題

英語または数学が80点以上で合格、それ以外は不合格と表示するため、次の式を入力したら全員合格となってしまった。このようになる理由を述べたうえで、数式を修正しなさい。

  • =IF(OR(A2,B2)>=80,"合格","不合格")

f:id:waenavi:20201017155310j:plain

 

解説

(1)OR関数の引数をセル参照だけにするとどうなるか

「英語または数学が80点以上」を日本語のまま「OR(A2,B2)>=80」と記述したとします。すべてTRUEになってしまいます。これは明らかに間違いです。

f:id:waenavi:20201017155412j:plain

 

ところで、「OR(A2,B2)」とは、「A2」という条件と「B2」という条件を、OR関数の中に入れたものです。IF関数の論理式において、比較演算をせずに単に数値が入力されているセルを参照した場合、0以外であればTRUE、0であればFALSEとみなされます(参考:IF関数の条件に「等号や不等号が必要」と思っているなら、IF関数を勉強し直してほしい)。A2もB2も0でない限りTRUEとなります。

f:id:waenavi:20201017155755j:plain

 

そして、OR関数はカッコの中に記述した複数の条件のうち1つ以上TRUEがあれば、TRUEを返す関数です。英語・数学の両方が0点でなければどちらかがTRUEになるので、OR関数は原則としてTRUEを返します。

f:id:waenavi:20201017160110j:plain

 

OR関数の直後に「>=80」があるので、「TRUE>=80」となります。前述のとおり、Excelでは論理値は数値よりも大きいものとみなされるため、この比較演算はいずれもTRUEとなり、IF関数は常に合格を返します。

f:id:waenavi:20201017160221j:plain

 

(2)OR関数の引数は「条件」

OR関数やAND関数のなかに記述するのは値ではなく「条件」です。それぞれ、論理値(TRUEまたはFALSE)が返ってくる式でなければなりません。「英語または数学が80点以上」は「英語が80点以上または数学が80点以上」として、それぞれ80点以上の判定をします。

  • =IF(OR(A2>=80,B2>=80),"合格","不合格")

f:id:waenavi:20201017160304j:plain

 

別解

連続するセル範囲の場合はCOUNTIFを使ってもよいです。

  • =IF(COUNTIF(A2:B2,">=80"),"合格","不合格")

f:id:waenavi:20201017160352j:plain

 


解説は以上です。


 


Copyright(C)2018-2020 waenavi, All rights reserved. [www.waenavi.com 定礎 平成三十年八月]
Youtube | 公式サイト | twitter | 著作権 | 運営者情報 | お問い合わせ