条件分岐
- 本章で用いる実習用ファイル
論理型・論理式
「論理型」は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 | ノット |
A | B | C | D | E | |
---|---|---|---|---|---|
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に色々な数字を入力して、その動きを確かめてみよう。
A | B | C | D | E | |
---|---|---|---|---|---|
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)
A と B と Cを全て合わせた部分
A + B + C
※Excelでは論理型(TRUE,FALSE)ではなく、数値型(TRUE→1,2,3,…;FALSE→0)になる(IF関数内ではTRUE,FALSEと同等に扱われる)。
- 論理積(A かつ B かつ C)
-
条件A,条件B,条件C、全部を同時に満たすなら真(TRUE)、そうでなければ偽(FALSE)
A と B と Cが重なった部分
A*B*C
※Excelでは論理型(TRUE,FALSE)ではなく、数値型(TRUE→1;FALSE→0)になる(IF関数内ではTRUE,FALSEと同等に扱われる)。
- 論理否定
-
条件が真(TRUE)なら偽(FALSE)、偽(FALSE)なら真(TRUE)
A | B | C | D | E | |
---|---|---|---|---|---|
1 | 命題 | 論理式 | 血液型 | ||
2 | 血液型がAB かつ 年齢が20以上 | =(D2 = "AB")*(D4 >= 20) | AB | ||
3 | 血液型がAB または 年齢が20以上 | =(D2 = "AB")+(D4 >= 20) | 年齢 | ||
4 | 血液型がAB以外 または 年齢が20未満 | =((D2 = "AB")*(D4 >= 20))=0 | 19 | ||
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を返す。
A | B | C | D | E | |
---|---|---|---|---|---|
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 |
課題:論理関数(形式)
上表のセルB5とB7にNOT関数を使わずに各々B4, B6と同じ意味の論理式を立てよ。
配列使用時の問題
- 判定A-実技・筆記ともに60点以上なら「真」
- 判定B-実技・筆記いずれかが60点以上なら「真」
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 名前 | 実技 | 筆記 | 判定A | 判定B | |
2 | 山岸 | 55 | 99 | =AND(B2>=60,C2>=60) | =OR(B2>=60,C2>=60) | |
3 | 小片 | 79 | 93 | TRUE | TRUE | |
4 | 新沼 | 60 | 55 | FALSE | TRUE | |
5 | 谷本 | 65 | 37 | FALSE | TRUE | |
6 | 岸本 | 80 | 59 | FALSE | TRUE | |
7 | 浅倉 | 71 | 60 | TRUE | TRUE | |
8 | 小野 | 70 | 17 | FALSE | TRUE | |
9 | 小野田 | 50 | 48 | FALSSE | FALSE | |
10 | 秋山 | 43 | 64 | FALSE | TRUE | |
11 |
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 名前 | 実技 | 筆記 | 判定A | 判定B | |
2 | 山岸 | 55 | 99 | =AND(B2:B10>=60,C2:C10>=60) | =OR(B2:B10>=60,C2:C10>=60) | |
3 | 小片 | 79 | 93 | |||
4 | 新沼 | 60 | 55 | |||
5 | 谷本 | 65 | 37 | |||
6 | 岸本 | 80 | 59 | |||
7 | 浅倉 | 71 | 60 | |||
8 | 小野 | 70 | 17 | |||
9 | 小野田 | 50 | 48 | |||
10 | 秋山 | 43 | 64 | |||
11 |
配列を用いるときはAND関数・OR関数は使えない。AND関数・OR関数はSUM関数と同様に引数の配列を集計してしまうからである。
実技 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | |
筆記 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
TRUE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
- 判定A:AND(B2:B10>=60,C2:C10>=60)
-
このすべてがTRUEであれば、TRUE
- 判定B:OR(B2:B10>=60,C2:C10>=60)
-
このいずれか一つがTRUEであれば、TRUE
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 名前 | 実技 | 筆記 | 判定A | 判定B | |
2 | 山岸 | 55 | 99 | =(B2:B10>=60)*(C2:C10>=60) | =(B2:B10>=60)+(C2:C10>=60) | |
3 | 小片 | 79 | 93 | 1 | 2 | |
4 | 新沼 | 60 | 55 | 0 | 1 | |
5 | 谷本 | 65 | 37 | 0 | 1 | |
6 | 岸本 | 80 | 59 | 0 | 1 | |
7 | 浅倉 | 71 | 60 | 1 | 2 | |
8 | 小野 | 70 | 17 | 0 | 1 | |
9 | 小野田 | 50 | 48 | 0 | 0 | |
10 | 秋山 | 43 | 64 | 0 | 1 | |
11 |
配列を用いるときは論理和→「+」演算子、論理積→「*」演算子を使う。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
実技 | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE |
筆記 | TRUE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
判定A | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
判定B | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 0 | 1 |
IF関数内では0→FALSE、それ以外→TRUEとして扱われる。
IS-関数
- 空白かどうかの判定:ISBLANK(値)
-
A B C 1 判定対象 判定 2 =ISBLANK(A2) 3 1 FALSE 4 =IF(TRUE,"") FALSE 5 ※B4の結果に注意(B4は常に空白と表示されるが、ISBLANK関数は空白とは見なさない。cf. COUNTBLANK関数)
- エラーかどうかの判定:ISERROR(値)
-
A B C 1 判定対象 判定 2 =1/3 =ISERROR(A2) 3 =1/0 TRUE 4 =SAM(A2:A3) TRUE 5 - 「#DIV/0!」エラー→「0を分母に持ってきたら駄目!」
- 「#NAME?」エラー→「関数名間違ってるよね?」
- 文字列型かどうかの判定:ISTEXT(値)
-
A B C 1 判定対象 判定 2 浅倉樹々 =ISTEXT(A2) 3 2000年9月3日 FALSE 4 TRUE FALSE 5 - 文字列型でないかどうかの判定:ISNONTEXT(値)
-
A B C 1 判定対象 判定 2 浅倉樹々 =ISNONTEXT(A2) 3 2000年9月3日 TRUE 4 TRUE TRUE 5 - 論理型かどうかの判定:ISLOGICAL(値)
-
A B C 1 判定対象 判定 2 浅倉樹々 =ISLOGICAL(A2) 3 2000年9月3日 FALSE 4 TRUE TRUE 5 - 数値型かどうかの判定:ISNUMBER(値)
-
A B C 1 判定対象 判定 2 浅倉樹々 =ISNUMBER(A2) 3 2000年9月3日 TRUE 4 TRUE FALSE 5 - 偶数かどうかの判定:ISEVEN(値)
-
A B C 1 判定対象 判定 2 TRUE =ISEVEN(A2) 3 20 TRUE 4 19 FALSE 5 ※数値でない値が来ると「#VALUE!」(値がおかしい!)エラーとなる。
- 奇数かどうかの判定:ISODD(値)
-
A B C 1 判定対象 判定 2 TRUE =ISODD(A2) 3 20 FALSE 4 19 TRUE 5
条件分岐:IF(論理型, 真の場合, 偽の場合)
IF関数は論理型(TRUE・FALSE)の値に応じて処理を分ける。
また論理型(TRUE/FALSE)の代わりに「1 ・ 0」でも同じ結果が得られる。
例:信号が赤なら止まれ、そうでなければ進め。
このような処理をExcelで実現するためにIF関数が用意されている。
A | B | C | |
---|---|---|---|
1 | 信号 | 動作 | |
2 | 赤 | =IF(A2="赤", "止まれ", "進め") | |
3 |
- IF( A2 = "赤", "止まれ", "進め" )
課題:成人判定(形式)
下フローチャートに即した式をセルC2に立てよ(残りのセルはオートフィルでもスピル配列でもよい)。
※空欄にするときは「""」(ダブルコーテーションを二回連続)。
A | B | C | D | |
---|---|---|---|---|
1 | 名前 | 年齢 | 判定 | |
2 | 山岸 | 21 | ||
3 | 小片 | 21 | 成人 | |
4 | 新沼 | 20 | 成人 | |
5 | 谷本 | 20 | 成人 | |
6 | 岸本 | 20 | 成人 | |
7 | 浅倉 | 19 | ||
8 | 小野 | 19 | ||
9 | 小野田 | 18 | ||
10 | 秋山 | 18 | ||
11 | 2020/8/1現在 |
3つ以上の分岐
3色の信号に対する処理を分けたいとする。
条件◇(論理式)が二つ必要である。となるとIF関数も二つ必要となる。
A | B | C | |
---|---|---|---|
1 | 信号 | 動作 | |
2 | 赤 | =IF(A2="赤", "止まれ", IF(A2="黄", "注意", "進め") ) | |
3 |
- IF(A2="赤", "止まれ", IF(A2="黄", "注意", "進め") )
-
- IF(A2="赤", "止まれ", )
- IF(A2="黄", "注意", "進め")
課題:成績判定(形式)
下フローチャートに即した式をセルC2に立てよ(残りのセルはオートフィルでもスピル配列でもよい)。
A | B | C | D | |
---|---|---|---|---|
1 | 名前 | 点数 | 評価 | |
2 | 山岸 | 55 | ||
3 | 小片 | 79 | 良 | |
4 | 新沼 | 60 | 可 | |
5 | 谷本 | 65 | 可 | |
6 | 岸本 | 80 | 優 | |
7 | 浅倉 | 71 | 良 | |
8 | 小野 | 70 | 良 | |
9 | 小野田 | 50 | 不可 | |
10 | 秋山 | 43 | 不可 | |
11 |
論理和・論理積の使用
下記判定基準での合否判定をしたい。
- 判定A-実技・筆記ともに60点以上なら「合格」と表示
- 判定B-実技・筆記いずれかが60点以上なら「合格」と表示
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 名前 | 実技 | 筆記 | 判定A | 判定B | |
2 | 山岸 | 55 | 99 | =IF((B2:B10>=60)*(C2:C10>=60),"合格","") | =IF((B2:B10>=60)+(C2:C10>=60),"合格","") | |
3 | 小片 | 79 | 93 | 合格 | 合格 | |
4 | 新沼 | 60 | 55 | 合格 | ||
5 | 谷本 | 65 | 37 | 合格 | ||
6 | 岸本 | 80 | 59 | 合格 | ||
7 | 浅倉 | 71 | 60 | 合格 | 合格 | |
8 | 小野 | 70 | 17 | 合格 | ||
9 | 小野田 | 50 | 48 | |||
10 | 秋山 | 43 | 64 | 合格 | ||
11 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
実技 | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE |
筆記 | TRUE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
判定A | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
判定B | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 0 | 1 |
IF関数内では0→FALSE、それ以外→TRUEとして扱われる。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
判定A | 合格 | 合格 | |||||||
判定B | 合格 | 合格 | 合格 | 合格 | 合格 | 合格 | 合格 | 合格 |
IF関数自体は配列の値一つ一つを判定し(四則演算と同じ動き)、配列の長さ分の結果を返す。
課題:合否判定(形式)
下記判定基準での合否判定を論理和・論理積を用いず、条件分岐(IF関数)のみを用いて行え。
- 判定A-実技・筆記ともに60点以上なら「合格」と表示
- 判定B-実技・筆記いずれかが60点以上なら「合格」と表示
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 名前 | 実技 | 筆記 | 判定A | 判定B | |
2 | 山岸 | 55 | 99 | |||
3 | 小片 | 79 | 93 | 合格 | 合格 | |
4 | 新沼 | 60 | 55 | 合格 | ||
5 | 谷本 | 65 | 37 | 合格 | ||
6 | 岸本 | 80 | 59 | 合格 | ||
7 | 浅倉 | 71 | 60 | 合格 | 合格 | |
8 | 小野 | 70 | 17 | 合格 | ||
9 | 小野田 | 50 | 48 | |||
10 | 秋山 | 43 | 64 | 合格 | ||
11 |
課題:進級判定(形式)
下記判定基準での進級判定を行え。
- 判定A-国語・数学・英語3教科全て60点以上なら「進級」と表示
- 判定B-国語・数学・英語の中から2教科以上が60点以上なら「進級」と表示
- 判定C-国語・数学・英語の中から1教科以上が60点以上なら「進級」と表示
A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|
1 | 名前 | 国語 | 数学 | 英語 | 判定A | 判定B | 判定C | |
2 | 山岸 | 88 | 98 | 85 | ||||
3 | 小片 | 59 | 55 | 41 | ||||
4 | 新沼 | 45 | 89 | 82 | 進級 | 進級 | ||
5 | 谷本 | 78 | 57 | 85 | 進級 | 進級 | ||
6 | 岸本 | 75 | 55 | 59 | 進級 | |||
7 | 浅倉 | 41 | 55 | 60 | 進級 | |||
8 | 小野 | 45 | 100 | 17 | 進級 | |||
9 | 小野田 | 60 | 61 | 63 | 進級 | 進級 | 進級 | |
10 | 秋山 | 63 | 65 | 44 | 進級 | 進級 | ||
11 |
応用問題
5教科あるときにその中で3教科以上が60点以上なら「進級」と表示されるように式を立てよ。
A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|
1 | 名前 | 国語 | 数学 | 英語 | 理科 | 社会 | 判定D | |
2 | 山岸 | 88 | 98 | 85 | 88 | 90 | ||
3 | 小片 | 59 | 55 | 41 | 35 | 21 | ||
4 | 新沼 | 45 | 89 | 82 | 72 | 54 | 進級 | |
5 | 谷本 | 78 | 57 | 85 | 52 | 75 | 進級 | |
6 | 岸本 | 75 | 55 | 59 | 53 | 45 | ||
7 | 浅倉 | 41 | 55 | 60 | 60 | 41 | ||
8 | 小野 | 45 | 100 | 17 | 43 | 53 | ||
9 | 小野田 | 60 | 61 | 63 | 63 | 65 | 進級 | |
10 | 秋山 | 63 | 65 | 44 | 62 | 67 | 進級 | |
11 |
課題:総当たりリーグ戦(形式)
6つのチームからなる総当たりの対戦表を作りたい。同一チーム同士のカード(対戦不可)には「-」が表示されるようにせよ。
A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|
1 | チーム | 汎神 | 虚人 | DaTA | 薬留止 | 中台 | 島根 | |
2 | 虚人 | - | ||||||
3 | DaTA | - | ||||||
4 | 汎神 | - | ||||||
5 | 薬留止 | - | ||||||
6 | 島根 | - | ||||||
7 | 中台 | - | ||||||
8 |
課題:ミーティング(形式)
ミーティングの予定を立てたい。そこで予定表に出席可能な日に「○」を付けてもらった。ミーティング開催可能な日に「可」と表示せよ。
- ミーティング開催条件
-
- 部長が出席し、それ以外に出席可能である人が2人以上いること
- 部長がいない場合、4人以上出席者がいること
A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|
1 | 名前 | 役職 | 月 | 火 | 水 | 木 | 金 | |
2 | 小片 | 副部長 | ○ | ○ | ○ | |||
3 | 山岸 | 部長 | ○ | ○ | ||||
4 | 新沼 | ○ | ○ | |||||
5 | 谷本 | ○ | ||||||
6 | 岸本 | ○ | ○ | ○ | ||||
7 | 浅倉 | ○ | ○ | |||||
8 | 小野 | ○ | ||||||
9 | 小野田 | |||||||
10 | 秋山 | ○ | ○ | ○ | ||||
11 | 開催可否 | 可 | 可 | |||||
12 |
※出席可能者数は文字列(○)の数を数えれば良い。
※集約関数(COUNTA関数)を用いるため、スピル配列は使えないので、オートフィルを用いること。
課題:合否判定2(形式)
下記判定基準での合否判定を行え。
- 判定A-実技・筆記ともに60点以上なら「合格」と表示
- 判定B-実技・筆記いずれかが60点以上なら「合格」と表示
ただし欠席者(「お休み」「風邪」など)は0点と扱う。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 名前 | 実技 | 筆記 | 判定A | 判定B | |
2 | 山岸 | お休み | 100 | |||
3 | 小片 | 82 | 97 | 合格 | 合格 | |
4 | 新沼 | 60 | 45 | 合格 | ||
5 | 谷本 | 75 | 52 | 合格 | ||
6 | 岸本 | 86 | 35 | 合格 | ||
7 | 浅倉 | 61 | 欠席 | 合格 | ||
8 | 小野 | 80 | 風邪 | 合格 | ||
9 | 小野田 | 38 | 53 | |||
10 | 秋山 | 欠 席 | 66 | 合格 | ||
11 |
- ISTEXT関数で文字列の判定を行い、文字列ならば60点未満と同等に扱う。
-
- 判定A-実技・筆記いずれかが欠席または60点未満なら空白(不合格)、そうでなければ「合格」
- 判定B-実技・筆記ともに欠席または60点未満なら空白(不合格)、そうでなければ「合格」と表示
- ISNUMBER関数で数値かどうかの判定を行う。
-
- 判定A-実技・筆記ともに数値かつ60点以上なら「合格」、そうでなければ空白(不合格)
- 判定B-実技・筆記いずれかが数値かつ60点以上なら「合格」、そうでなければ「空白(不合格)
課題:スイミングスクール会費(形式)
あるスイミングスクールは月会費9,000円である。20歳未満は15%割引が受けられる。
各人の支払額を求めよ。
A | B | C | D | |
---|---|---|---|---|
1 | 名前 | 年齢 | 月会費 | |
2 | 山岸 | 21 | ||
3 | 小片 | 21 | 9,000 | |
4 | 新沼 | 20 | 9,000 | |
5 | 谷本 | 20 | 9,000 | |
6 | 岸本 | 20 | 9,000 | |
7 | 浅倉 | 19 | 7,650 | |
8 | 小野 | 19 | 7,650 | |
9 | 小野田 | 18 | 7,650 | |
10 | 秋山 | 18 | 7,650 | |
11 | ||||
12 | 月会費(定額) | 9,000 | ||
13 | 割引(20歳未満) | 15% | ||
14 |