Excel講座

条件分岐

本章で用いる実習用ファイル

論理型・論理式

「論理型」はTRUE FALSEの2値ある(しかない)。この論理型を返す数式が論理式(条件式)である。論理式は比較演算子(=, >, <)を用いて記述される。

「論理型」は数値型と一定の互換性を持っている(後述するIF関数の引数内)。

  • 0 → FALSE
  • 0以外 → TRUE
命題論理式読み方
AはBと等しいA = Bイコール
AはBより大きいA > B大なり
AはB以上A >= B大なりイコール
AはBより小さいA < B小なり
AはB以下A <= B小なりイコール
AとBは等しくないA <> Bノット
ABCDE
1命題論理式
2セル[D1]は20と等しい=D1 = 20
3セル[D1]は20より大きい=D1 > 20
4セル[D1]は20以上=D1 >= 20
5セル[D1]は20より小さい=D1 < 20
6セル[D1]は20以下=D1 <= 20
7セル[D1]は20と等しくない=D1 <> 20
8

セルD1に色々な数字を入力して、その動きを確かめてみよう。

D1に20を入力した例
ABCDE
1命題論理式20
2セル[D1]は20と等しいTRUE
3セル[D1]は20より大きいFALSE
4セル[D1]は20以上TRUE
5セル[D1]は20より小さいFALSE
6セル[D1]は20以下TRUE
7セル[D1]は20と等しくないFALSE
8

論理和・論理積・論理否定

論理和(A または B または C)

条件A,条件B,条件C、どれか一つを満たしたら真(TRUE)、そうでなければ偽(FALSE)

ABCを全て合わせた部分

A + B + C

※Excelでは論理型(TRUE,FALSE)ではなく、数値型(TRUE→1,2,3,…;FALSE→0)になる(IF関数内ではTRUE,FALSEと同等に扱われる)。

論理積(A かつ B かつ C)

条件A,条件B,条件C、全部を同時に満たすなら真(TRUE)、そうでなければ偽(FALSE)

ABCが重なった部分

A*B*C

※Excelでは論理型(TRUE,FALSE)ではなく、数値型(TRUE→1;FALSE→0)になる(IF関数内ではTRUE,FALSEと同等に扱われる)。

論理否定

条件が真(TRUE)なら偽(FALSE)、偽(FALSE)なら真(TRUE)

A,B,C、3条件のベン図
ABCDE
1命題論理式血液型
2血液型がAB
かつ
年齢が20以上
=(D2 = "AB")*(D4 >= 20)AB
3血液型がAB
または
年齢が20以上
=(D2 = "AB")+(D4 >= 20)年齢
4血液型がAB以外
または
年齢が20未満
=((D2 = "AB")*(D4 >= 20))=019
5血液型がAB以外
かつ
年齢が20未満
=((D2 = "AB")+(D4 >= 20))=0
6
論理関数
論理和: OR(論理式・論理型1 , 論理式・論理型2 , 論理式・論理型3 , …)

論理式のどれか一つがTRUEならば、TRUEを返す。そうでなければFALSEを返す。

IF関数第一引数においては論理式・論理型1 + 論理式・論理型2 + 論理式・論理型3 + …と同じ。

論理積: AND(論理式・論理型1 , 論理式・論理型2 , 論理式・論理型3 , …)

論理式が全部TRUEならば、TRUEを返す。そうでなければFALSEを返す。

IF関数第一引数においては論理式・論理型1 * 論理式・論理型2 * 論理式・論理型3 * …と同じ。

論理否定: NOT(論理式・論理型1 )

論理式がTRUEならば、FALSEを返す。そうでなければTRUEを返す。

ABCDE
1命題論理式血液型
2血液型がAB
かつ
年齢が20以上
=AND(D2 = "AB", D4 >= 20)AB
3血液型がAB
または
年齢が20以上
=OR(D2 = "AB", D4 >= 20)年齢
4血液型がAB以外
または
年齢が20未満
=NOT(AND(D2 = "AB", D4 >= 20))19
5
6血液型がAB以外
かつ
年齢が20未満
=NOT(OR(D2 = "AB", D4 >= 20))
7
8
課題:論理関数(xlsx形式)

上表のセルB5とB7にNOT関数を使わずに各々B4, B6と同じ意味の論理式を立てよ。

配列使用時の問題
  • 判定A-実技・筆記ともに60点以上なら「真」
  • 判定B-実技・筆記いずれかが60点以上なら「真」
AND関数OR関数
ABCDEF
1名前実技筆記判定A判定B
2山岸5599=AND(B2>=60,C2>=60)=OR(B2>=60,C2>=60)
3小片7993TRUETRUE
4新沼6055FALSETRUE
5谷本6537FALSETRUE
6岸本8059FALSETRUE
7浅倉7160TRUETRUE
8小野7017FALSETRUE
9小野田5048FALSSEFALSE
10秋山4364FALSETRUE
11
スピル配列(失敗)
ABCDEF
1名前実技筆記判定A判定B
2山岸5599=AND(B2:B10>=60,C2:C10>=60)=OR(B2:B10>=60,C2:C10>=60)
3小片7993
4新沼6055
5谷本6537
6岸本8059
7浅倉7160
8小野7017
9小野田5048
10秋山4364
11

配列を用いるときはAND関数・OR関数は使えない。AND関数・OR関数はSUM関数と同様に引数の配列を集計してしまうからである。

実技123456789
FALSETRUETRUETRUETRUETRUETRUEFALSEFALSE
筆記123456789
TRUETRUEFALSEFALSEFALSETRUEFALSEFALSEFALSE
判定A:AND(B2:B10>=60,C2:C10>=60)

このすべてがTRUEであれば、TRUE

判定B:OR(B2:B10>=60,C2:C10>=60)

このいずれか一つがTRUEであれば、TRUE

スピル配列
ABCDEF
1名前実技筆記判定A判定B
2山岸5599=(B2:B10>=60)*(C2:C10>=60)=(B2:B10>=60)+(C2:C10>=60)
3小片799312
4新沼605501
5谷本653701
6岸本805901
7浅倉716012
8小野701701
9小野田504800
10秋山436401
11

配列を用いるときは論理和→「+」演算子、論理積→「*」演算子を使う。

123456789
実技FALSETRUETRUETRUETRUETRUETRUEFALSEFALSE
筆記TRUETRUEFALSEFALSEFALSETRUEFALSEFALSEFALSE
判定A010001000
判定B121112101

IF関数内では0→FALSE、それ以外→TRUEとして扱われる。

IS-関数

空白かどうかの判定:ISBLANK()
ABC
1判定対象判定
2=ISBLANK(A2)
31FALSE
4=IF(TRUE,"")FALSE
5

※B4の結果に注意(B4は常に空白と表示されるが、ISBLANK関数は空白とは見なさない。cf. COUNTBLANK関数)

エラーかどうかの判定:ISERROR()
ABC
1判定対象判定
2=1/3=ISERROR(A2)
3=1/0TRUE
4=SAM(A2:A3)TRUE
5
  • #DIV/0!」エラー→「0を分母に持ってきたら駄目!」
  • #NAME?」エラー→「関数名間違ってるよね?」
文字列型かどうかの判定:ISTEXT()
ABC
1判定対象判定
2浅倉樹々=ISTEXT(A2)
32000年9月3日FALSE
4TRUEFALSE
5
文字列型でないかどうかの判定:ISNONTEXT()
ABC
1判定対象判定
2浅倉樹々=ISNONTEXT(A2)
32000年9月3日TRUE
4TRUETRUE
5
論理型かどうかの判定:ISLOGICAL()
ABC
1判定対象判定
2浅倉樹々=ISLOGICAL(A2)
32000年9月3日FALSE
4TRUETRUE
5
数値型かどうかの判定:ISNUMBER()
ABC
1判定対象判定
2浅倉樹々=ISNUMBER(A2)
32000年9月3日TRUE
4TRUEFALSE
5
偶数かどうかの判定:ISEVEN()
ABC
1判定対象判定
2TRUE=ISEVEN(A2)
320TRUE
419FALSE
5

※数値でない値が来ると「#VALUE!」(値がおかしい!)エラーとなる。

奇数かどうかの判定:ISODD()
ABC
1判定対象判定
2TRUE=ISODD(A2)
320FALSE
419TRUE
5

条件分岐:IF(論理型, 真の場合, 偽の場合)

IF関数は論理型(TRUE・FALSE)の値に応じて処理を分ける。

また論理型(TRUE/FALSE)の代わりに「1 ・ 0」でも同じ結果が得られる。

例:信号が赤なら止まれ、そうでなければ進め。

条件分岐のフローチャート
フローチャート:赤?止まれ:進め

このような処理をExcelで実現するためにIF関数が用意されている。

ABC
1信号動作
2=IF(A2="赤", "止まれ", "進め")
3
  • IF( A2 = "赤", "止まれ", "進め" )

課題:成人判定(xlsx形式)

下フローチャートに即した式をセルC2に立てよ(残りのセルはオートフィルでもスピル配列でもよい)。

フローチャート:20以上?「成人」:空欄

※空欄にするときは「""」(ダブルコーテーションを二回連続)。

ABCD
1名前年齢判定
2山岸21
3小片21成人
4新沼20成人
5谷本20成人
6岸本20成人
7浅倉19
8小野19
9小野田18
10秋山18
112020/8/1現在

3つ以上の分岐

3色の信号に対する処理を分けたいとする。

フローチャート:赤?止まれ:黄?注意:進め

条件◇(論理式)が二つ必要である。となるとIF関数も二つ必要となる。

ABC
1信号動作
2=IF(A2="赤", "止まれ", IF(A2="黄", "注意", "進め") )
3
IF(A2="赤", "止まれ", IF(A2="黄", "注意", "進め") )
  • IF(A2="赤", "止まれ",       )
  • IF(A2="黄", "注意", "進め")
課題:成績判定(xlsx形式)

下フローチャートに即した式をセルC2に立てよ(残りのセルはオートフィルでもスピル配列でもよい)。

フローチャート:80以上?「優」:70以上?「良」:60以上?「可」:「不可」
ABCD
1名前点数評価
2山岸55
3小片79
4新沼60
5谷本65
6岸本80
7浅倉71
8小野70
9小野田50不可
10秋山43不可
11

論理和・論理積の使用

下記判定基準での合否判定をしたい。

  • 判定A-実技・筆記ともに60点以上なら「合格」と表示
  • 判定B-実技・筆記いずれかが60点以上なら「合格」と表示
ABCDEF
1名前実技筆記判定A判定B
2山岸5599=IF((B2:B10>=60)*(C2:C10>=60),"合格","")=IF((B2:B10>=60)+(C2:C10>=60),"合格","")
3小片7993合格合格
4新沼6055合格
5谷本6537合格
6岸本8059合格
7浅倉7160合格合格
8小野7017合格
9小野田5048
10秋山4364合格
11
123456789
実技FALSETRUETRUETRUETRUETRUETRUEFALSEFALSE
筆記TRUETRUEFALSEFALSEFALSETRUEFALSEFALSEFALSE
判定A010001000
判定B121112101

IF関数内では0→FALSE、それ以外→TRUEとして扱われる。

123456789
判定A合格合格
判定B合格合格合格合格合格合格合格合格

IF関数自体は配列の値一つ一つを判定し(四則演算と同じ動き)、配列の長さ分の結果を返す。

課題:合否判定(xlsx形式)

下記判定基準での合否判定を論理和・論理積を用いず、条件分岐(IF関数)のみを用いて行え。

  • 判定A-実技・筆記ともに60点以上なら「合格」と表示
  • 判定B-実技・筆記いずれかが60点以上なら「合格」と表示
ABCDEF
1名前実技筆記判定A判定B
2山岸5599
3小片7993合格合格
4新沼6055合格
5谷本6537合格
6岸本8059合格
7浅倉7160合格合格
8小野7017合格
9小野田5048
10秋山4364合格
11

課題:進級判定(xlsx形式)

下記判定基準での進級判定を行え。

  • 判定A-国語・数学・英語3教科全て60点以上なら「進級」と表示
  • 判定B-国語・数学・英語の中から2教科以上が60点以上なら「進級」と表示
  • 判定C-国語・数学・英語の中から1教科以上が60点以上なら「進級」と表示
ABCDEFGH
1名前国語数学英語判定A判定B判定C
2山岸889885
3小片595541
4新沼458982進級進級
5谷本785785進級進級
6岸本755559進級
7浅倉415560進級
8小野4510017進級
9小野田606163進級進級進級
10秋山636544進級進級
11

応用問題

5教科あるときにその中で3教科以上が60点以上なら「進級」と表示されるように式を立てよ。

ABCDEFGH
1名前国語数学英語理科社会判定D
2山岸8898858890
3小片5955413521
4新沼4589827254進級
5谷本7857855275進級
6岸本7555595345
7浅倉4155606041
8小野45100174353
9小野田6061636365進級
10秋山6365446267進級
11

課題:総当たりリーグ戦(xlsx形式)

6つのチームからなる総当たりの対戦表を作りたい。同一チーム同士のカード(対戦不可)には「-」が表示されるようにせよ。

ABCDEFGH
1チーム汎神虚人DaTA薬留止中台島根
2虚人-
3DaTA-
4汎神-
5薬留止-
6島根-
7中台-
8

課題:ミーティング(xlsx形式)

ミーティングの予定を立てたい。そこで予定表に出席可能な日に「○」を付けてもらった。ミーティング開催可能な日に「可」と表示せよ。

ミーティング開催条件
  • 部長が出席し、それ以外に出席可能である人が2人以上いること
  • 部長がいない場合、4人以上出席者がいること
ABCDEFGH
1名前役職
2小片副部長
3山岸部長
4新沼
5谷本
6岸本
7浅倉
8小野
9小野田
10秋山
11開催可否
12

※出席可能者数は文字列(○)の数を数えれば良い。

※集約関数(COUNTA関数)を用いるため、スピル配列は使えないので、オートフィルを用いること。

課題:合否判定2(xlsx形式)

下記判定基準での合否判定を行え。

  • 判定A-実技・筆記ともに60点以上なら「合格」と表示
  • 判定B-実技・筆記いずれかが60点以上なら「合格」と表示

ただし欠席者(「お休み」「風邪」など)は0点と扱う。

ABCDEF
1名前実技筆記判定A判定B
2山岸お休み100
3小片8297合格合格
4新沼6045合格
5谷本7552合格
6岸本8635合格
7浅倉61欠席合格
8小野80風邪合格
9小野田3853
10秋山欠 席66合格
11
ISTEXT関数で文字列の判定を行い、文字列ならば60点未満と同等に扱う。
  • 判定A-実技・筆記いずれかが欠席または60点未満なら空白(不合格)、そうでなければ「合格」
  • 判定B-実技・筆記ともに欠席または60点未満なら空白(不合格)、そうでなければ「合格」と表示
ISNUMBER関数で数値かどうかの判定を行う。
  • 判定A-実技・筆記ともに数値かつ60点以上なら「合格」、そうでなければ空白(不合格)
  • 判定B-実技・筆記いずれかが数値かつ60点以上なら「合格」、そうでなければ「空白(不合格)

課題:スイミングスクール会費(xlsx形式)

あるスイミングスクールは月会費9,000円である。20歳未満は15%割引が受けられる。

各人の支払額を求めよ。

ABCD
1名前年齢月会費
2山岸21
3小片219,000
4新沼209,000
5谷本209,000
6岸本209,000
7浅倉197,650
8小野197,650
9小野田187,650
10秋山187,650
11
12月会費(定額)9,000
13割引(20歳未満)15%
14