- Home »
- Excelの基本操作の目次 »
- フィルター(データ抽出) »
- 複雑な条件を数式(論理式)で表現する
- 例えば、下図のような男女20人のテスト結果のデータがあります。
- この中で「国語が50以上」という条件でデータを分けたいと思います。
かずで青い円は国語50が以上の人の集まりを表しています。
すると、円の外は国語が50以上でない人の集まりということになります。
- これを数式で表すと、=IF(D2>=50,"OK","NG") といった数式で表現されるかもしれません。
ここでは論理式で =D2>=50 として、TRUE または FALSE を返す数式を作成します。
- H2セルには =IF(D2>=50,"OK","NG") と入力しています。
I2セルには =D2>=50 という論理式を入力しています。
H列の 「NG」が「FALSE」、「OK」が「TRUE」に対応していること側k理ます。
論理式を満たす場合は TRUE 、そうでない場合は FALSE が返されます。
- つまり、 論理式 =D2>=50 の結果で
国語が50以上の集まりを表す青い円は TRUE 、それ以外の集まりは FALSE で表すことができました。
- 先ほどの成績表で、国語が50以上、数学が50以上 という2つの条件でデータを分けたいと思います。
すると、2つの円で表現すると、4つの部分に分かれることが分かります。
- 1の部分は「国語が50以上」で「数学が50以上でない」 ということを表しています。
この日本語をそのまま数式にすると、 =AND(D2>=50,NOT(E2>=50))となります。
「数学が50以上でない」というのは言い変えれば、「数学が50未満」ということになりますので、=AND(D2>=50,E2<50) とすることができます。
なお、AND と OR はそれぞれ 論理積と論理和 といい、 掛け算と足し算で表すことができます。
よって、 =AND(D2>=50,E2<50) は =(D2>=50)*(E2<50) と書くことができます。
この論理式で返される値(ワークシート関数で返される値)は TRUEの場合は 1 、FALSEの場合は 0 となります。
- 2の部分は国語と数学が逆のケースですので、「数学が50以上」AND「国語が50未満」ということになります。
論理式は =(E2>=50)*(D2<50) とすることができます。
- 3の部分は「国語が50以上」AND「数学が50以上」ということになります。
論理式は =(D2>=50)*(E2>=50) とすることができます。
- 4の部分は「国語が50以上でない」AND「数学が50以上でない」となり、つまり、「国語が50未満」AND「数学が50未満」となります。
論理式は =(D2<50)*(E2<50) とすることができます。
これで、D:E列がすべて塗りつぶされましたので、20人すべてのデータが1〜4に区分けされたのがわかります。
- 国語と数学どちらかが50以上である場合。
「国語が50以上」または「数学が50以上」ということができます。「または」は OR ですので、=OR(D2>=50,E2>=50) と書くことができます。
論理式では OR を 論理和といい、+ で表すことができます。よって、=(D2>=50)+(E2>=50) と書くことができます。
この場合、1以上が TRUE に該当します。0が FALSEです。
- 先ほどの成績表で、国語が50以上、数学が50以上、英語が50以上 という3つの条件でデータを分けたいと思います。
すると、3つの円で表現すると、8つの部分に分かれることが分かります。
- データを区分すると下図のようになります。
なお、1の部分に区分されるデータがなかったので、E16セルとF16セルの値を変更しました。
- 1の部分は「国語が50以上」AND「数学が50未満」AND「英語が50未満」ということになります。
論理式では =(D2>=50)*(E2<50)*(F2<50)
- 2の部分「数学が50以上」AND「国語が50未満」AND「英語が50未満」
論理式では =(E2>=50)*(D2<50)*(F2<50)
- 3の部分「英語が50以上」AND「国語が50未満」AND「数学が50未満」
論理式では =(F2>=50)*(D2<50)*(E2<50)
- 4の部分「国語が50以上」AND「数学が50以上」AND「英語が50未満」
論理式では =(D2>=50)*(E2>=50)*(F2<50)
- 5の部分「数学が50以上」AND「英語が50以上」AND「国語が50未満」
論理式では =(E2>=50)*(F2>=50)*(D2<50)
- 6の部分「国語が50以上」AND「英語が50以上」AND「数学が50未満」
論理式では =(D2>=50)*(F2>=50)*(E2<50)
- 7の部分「国語が50以上」AND「数学が50以上」AND「英語が50以上」
論理式では =(D2>=50)*(E2>=50)*(F2>=50)
- 8の部分「国語が50未満」AND「数学が50未満」AND「英語が50未満」
論理式では =(D2<50)*(E2<50)*(F2<50)
- 国語、数学、英語のいずれかが50以上という条件の場合
「国語が50以上」OR「数学が50以上」OR「英語が50以上」という具合になります。
=OR(D2>=50,E2>=50,F2>=50) と書くことができます。
論理式は =(D2>=50)+(E2>=50)+(F2>=50) とすることができます。
または、1科目でも50以上であると考えることができます。
すると、Countif関数を使って、=COUNTIF(D2:F2,">=50")>=1 と条件式を書くことができます。
下図のように同じ結果が得られることがわかります。
- 1と2と3の部分を求めたいときは?
作業列1〜3の和を求めればよいので、K2セルには単純に =H2+I2+J2 と入力すればよいと思います。
しかし、 1つの式にすると =(D2>=50)*(E2<50)*(F2<50)+(E2>=50)*(D2<50)*(F2<50)+(F2>=50)*(D2<50)*(E2<50) と長くなってしまいます。
こういったケースでは、視点をちょっと変えて、1,2,3の部分は「1科目だけが50以上である」ということだとも考えることができます。
すると、Countif関数を使って条件を書くことができます。L2セルには =COUNTIF(D2:F2,">=50")=1 と入力しています。
下図を見ると同じ結果が得られたのがわかると思います。
- 4と5と6の部分を求めたいときは?
作業列4〜6の和を求めればよいので、K2セルには単純に =H2+I2+J2 と入力すればよいと思います。
しかし、 1つの式にすると =(D2>=50)*(E2>=50)*(F2<50)+(E2>=50)*(F2>=50)*(D2<50)+(D2>=50)*(F2>=50)*(E2<50) と長くなってしまいます。
4,5,6の部分は2科目が50以上で、3科目がすべて50以上を除く部分と考えることができます。
すると、=AND(COUNTIF(D2:F2,">=50")=2,NOT(COUNTIF(D2:F2,">=50")=3)) といった条件式を考えました。
下図を見ると同じ結果が得られたのがわかると思います。
Home|Excelの基本操作の目次|複雑な条件を数式(論理式)で表現する