2023年10月23日11時00分 / 提供:マイナビニュース
前回の連載では「AND」や「OR」といった関数の使い方を紹介した。Excelには、これらのほかにも「XOR」や「NOT」といった関数が用意されている。頻繁に使う関数ではないが、ANDやORに関連する関数として覚えておくとよいだろう。関数XORは「排他的論理和」で複数条件を処理するとき、関数NOTはTRUE/FALSEを反転させるときに活用できる。
関数XORの動作
前回の連載で紹介したように、複数の条件を「かつ」で結ぶときは関数AND、「または」で結ぶときは関数ORを使用するのが一般的だ。別の言い方で表現すると、
・すべての条件を満たすときは ・・・・ 関数AND
・いずれかの条件を満たすときは ・・・ 関数OR
を使用する、と覚えておけばよい。これらのほかにも、Excelは「XOR」や「NOT」といった関数でTRUE/FALSEを制御することが可能となっている。
関数XORは「排他的論理和」と呼ばれる手法で複数条件を処理するもので、条件が2つの場合、「どちらか一方の条件だけを満たすとき」にTRUEとなる。2つの条件を「両方とも満たさないとき」はFALSEになる。特徴的なのは、2つの条件を「両方とも満たすとき」もFALSEになることだ。
ANDとORを含めて各関数の動作をまとめると、以下の図のようになる。
関数XORの使い方はANDやORと同じで、カッコ内に条件をカンマ区切りで列記していけばよい。
◆関数XORの書式
=XOR(条件1, 条件2, [条件3], ・・・)
具体的な例を使って解説していこう。以下の図は「レストランの予約フォーム」をExcelで作成した例だ。「各コースの人数が正しく入力されているか?」をチェックするためにIFとXORを組み合わせた関数がC10セルに入力されている。
関数XOR内に指定されている条件は以下の2つ。
・Aコースの人数は「1以上」か?(C8>=1)
・Bコースの人数は「1以上」か?(C9>=1)
これらの条件をXORで処理した結果に応じて、「OK」または「※コースの混在は不可」の文字が表示される仕組みになっている。
各パターンについて順番に見ていこう。まずは、Aコースのみ「1以上」の場合だ。この場合、(C8>=1)の条件を満たす、(C9>=1)の条件は満たさない、となるので「どちらか一方の条件だけを満たすとき」に該当する。よって、関数XORの結果はTRUEになり、「OK」という文字が表示される。
続いては、Bコースのみ「1以上」の場合だ。この場合、(C9>=1)の条件は満たしている。もう一方のC8セルは「空白セル」になっているが、これは数値の0(ゼロ)とみなされるので(C8>=1)の条件は満たしていない。つまり、「どちらか一方の条件だけを満たすとき」に該当することになり、関数XORの結果はTRUEになる。
今度は、AコースとBコースの両方に「1以上」の数値を入力した例だ。この場合、(C8>=1)と(C9>=1)の条件を「両方とも満たすとき」に該当する。よって、関数XORの結果はFALSEになり、「※コースの混在は不可」という文字が表示される。
このレストランでは「Aコースを3人、Bコースを2人」などの予約は受け付けておらず、コースを統一して予約するのが基本となっている。このような場合にIFとXORを組み合わせたチェック機能を設けておくと、「コースが統一されているか?」を手軽に確認することが可能となる。
ちなみに、AコースとBコースが両方とも「1以上」でない場合も、関数XORの結果はFALSEになり、「※コースの混在は不可」という文字が表示されてしまう。
こういった状況を考慮すると、FALSE(偽の場合)に表示する文字は「人数を入力してください(※コースの混在は不可)」などにしておいた方が無難かもしれない。
なお、もっと根本的な議論をすると、「各コースの人数」を入力する仕様になっていることが、そもそもの設計ミスといえる。コースの混在を認めないのであれば、「人数」と「コース選択」という形で入力欄を用意しておくべきだ。よって、上に示した図は「XORの動作を解説するための例」として捉えて頂ければ幸いだ。
条件が3つ以上ある場合は?
ANDやORと同様に、関数XORもカッコ内に「3つ以上の条件」を指定することが可能となっている。この場合、条件を満たしている数が「奇数」のときに関数XORの結果はTRUEになる。逆に考えると、条件を満たしている数が「偶数」のときはFALSEとして処理される訳だ。
参考までに、条件が3つの場合について動作を一覧表にまとめておこう。
「3つ以上の条件をXORで処理する」というのは少し特殊な使い方になるが、念のため、覚えておくとよいだろう。
TRUE/FALSEを反転させる関数NOT
続いては、関数NOTを使い方を紹介していこう。この関数は、TRUEとFALSEを反転させる機能を有している。
◆関数NOTの書式
=NOT(条件)
つまり、カッコ内に記した条件の結果がTRUEのときは「FALSE」、FALSEのときは「TRUE」を返す関数となる。指定した条件を「・・・でない場合」に変換する、と考えることもできるだろう。
具体的な例で見ていこう。たとえば「人数が4人未満でない場合」という条件は、以下の図のように記述すると指定できる。
今回の例ではC5セルに「3」と入力されているので、(C5=4,"OK","※4人以上で予約してください")
と記述すればよい。わざわざNOTを使って否定条件にすると、かえって頭が混乱してしまう。
ANDやORと組わせて関数NOTを使用する方法もある。たとえば、「予約可能な人数は4~10人」という条件を以下の図のように指定することも可能だ。
今回の例ではC5セルに「3」と入力されているので、(C510)の条件は満たさない、ということになる。これらの条件がORで結ばれているので、その結果はTRUEになる。そして、このTRUEが関数NOTにより反転されてFALSEになる。その結果、関数IFは「偽の場合」として処理される。
かなり頭が混乱しそうな話であるが、このような条件指定でも「予約可能な人数は4~10人」という条件を実現することが可能だ(入力される数値が整数の場合)。とはいえ、こちらも「4以上」かつ「10以下」と条件を指定したほうが素直で理解しやすくなる。よって、わざわざ関数NOTを使用する意味はない。
=IF(AND(C5>=4,C5=1)
・ドリンクが「空白ではない」か?(C7"")
これら2つの条件を「両方とも満たすとき」は、関数XORの結果はFALSEになる。これが関数NOTで反転されてTRUEになる。その結果、関数IFは「真の場合」として処理される。
2つの条件を「どちらか一方の条件だけを満たすとき」は、関数XORの結果はTRUEになる。これが関数NOTで反転されてFALSEになる。その結果、関数IFは「偽の場合」として処理される。
上図の場合、「デザートsetの数」を指定しているのに「ドリンク」が指定されていない・・・、という入力ミスになる。
「ドリンク」だけを指定して、「デザートsetの数」を指定していない場合も同様だ。この場合も「どちらか一方の条件だけを満たすとき」に該当するので、関数XORの結果はTRUEになる。これが関数NOTで反転されてFALSEになる。その結果、関数IFは「偽の場合」として処理される。
最後は、「デザートsetの数」に0(ゼロ)を入力し、「ドリンク」を空白のままにした場合の例だ。この場合、2つの条件を「両方とも満たさないとき」に該当する。よって、関数XORの結果はFALSEになり、これが関数NOTで反転されてTRUEになる。その結果、関数IFは「真の場合」として処理される。
上に示した例は、「デザートsetの数」が0なので「ドリンク」が指定されていなくても問題ない、という考え方だ。なお、「デザートsetの数」と「ドリンク」が両方とも空白の場合、C6セルは0(ゼロ)とみなされるので同様の結果になる。
少し複雑になってきたので、いちど話を整理しておこう。今回の連載の前半で解説したように、XORは「どちらか一方の条件だけを満たすとき」にTRUEとなる。
◆XORの動作
・一方の条件だけを満たす ・・・・ TRUE
・両方とも条件を満たす ・・・・・ FALSE
・両方とも条件を満たさない ・・・ FALSE
これを関数NOTで反転させると、以下のようになる。
◆NOT+XORの動作
・一方の条件だけを満たす ・・・・ FALSE
・両方とも条件を満たす ・・・・・ TRUE
・両方とも条件を満たさない ・・・ TRUE
つまり、「両方とも条件を満たす」もしくは「両方とも条件を満たさない」ときにTRUEとなる訳だ。より実践的な話にすると、「どちらか一方だけ指定するのは認めない」、「指定するなら両方とも指定しろ」といったケースにNOT+XORが活用できる訳だ。
今回の連載で紹介したように、条件を指定する際にXORやNOTを活用することも可能である。ANDやORに比べると、その重要度(必要性)はかなり低くなるが、関連する関数として覚えておいても損はないだろう。