神奈川大学 経済学部
2012年度経済情報処理II

第9課 場合分けを含む計算式(IF関数)

第9課の目標

↑経済情報処理(2012)ホームページに戻る

準備問題
BMI(Body Mass Index)は 体重(kg)÷身長(m)÷身長(m)で計算できる。たとえば身長165cm、体重60kgならば BMIは60÷1.65÷1.65で約22になる。
data05.xlsx BMI シートに入っているデータを使って、それぞれの人のBMIを計算しなさい。ただし、件数が多いため、計算式のコピーを上手に使うこと。

1. 単純な場合分けを含む計算式

例題1. 試験の成績と合否

data05.xlsx例題1シートには、仮想的な試験の点数データが入っている。このデータを使って

  1. 合否(合格点は60点)をワークシートに「合格」「落第」の文字列で表示する。
  2. 不合格者数を数える。

の2つの操作を行いたい。

この操作は、得点が60点以上か60点未満かで判断して違うことを行う必要がある。このように「ある条件を満たすかどうか」で操作を変える場合、ExcelではIF関数という関数を用いる。

Step 1. まずC2 に「合格」「落第」の表示を行う

Excelの場合、計算式が入っているセルの値は計算式の値になるので、IF関数が返す値を「合格」「落第」の文字列にすればこの目的は達成できる。IF関数の書式は、

IF(条件, 条件が成立した場合の値, 条件が成立しない場合の値)

となっている。このケースでは

であるから、これをそのままExcelの計算式にすればよい。

セル C2 ← =IF(B2>=60, "合格", "落第")

最初の引数である、B2>=60は、「B2セルの内容が60以上か?」という条件を表す式になる。data05.xlsxのデータでは、B2は60なのでこの条件は成立する。条件が成立した場合は、2つめの引数がIF関数の値となるので、C2 は「合格」と表示されるはず。

Step 2. 計算式をコピーして全てのデータについて合否が判定できるようにする。

Step 3. 不合格者数を数える

Excelでこの目的を達成する方法はいくつかあるが、ここでは不合格者数を数える→落第なら1、合格なら0が入っている列を作成して、その列のデータを全部合計するという愚直な方法を採用する。

この場合、条件は「落第か?」ということになるので、Step 2で作成した「合格」「落第」のデータが使える。

セル D2 ← =IF(C2="落第", 1, 0)

最初の引数である C2="落第" は、C2セルの値が「落第」という文字列かどうかを検査している。落第なら、第2引数が関数の値として評価されるので関数の値は1となり、合格なら第3引数が評価されて0になる。

計算式をコピーしたら、セル G1 に合計するための計算式(SUM関数を使う)を入れておしまい。

*1)「SUMIF関数使えばいいんじゃね?」 と思ったひとは、頭が固いので自己批判しましょう。条件が複雑になったらSUMIFではすぐ破綻します。「ピボット・テーブル使えばいいんじゃね?」と思った人は経済情報処理なんか受講して単位稼ぎしてないで、他の専攻科目を履修しましょう。

Tips. Excelの比較演算子

Excelの比較演算子は以下のようになっている。使える記号の制限から、数学で使う比較演算子とは違うので注意。

説明 数学での表記  Excelでの表記 
 AはBより大きい(Bと等しい場合は含まない) A>B  A>B 
 AはB以上(Bと等しい場合を含む) A≧B  A>=B 
 AはBと等しい A=B  A=B 
AはB以下(Bと等しい場合を含む) A≦B A<=B
 AはB未満(Bと等しい場合は含まない) A<B  A<B 
 AとBは等しくない A≠B  A<>B 

練習問題1.

例題1では合格点(60点)が予め決まっていたが、都合により不合格者数が20人程度になるよう調整したい。

  1. C列に入れた計算式を変更して、セル G5 に入っている合格点を変えれば合否判定の結果が変わるようにしなさい。
  2. セル G5 に入っている合格点をいろいろ変えてみて、不合格者が20人程度になるように調整してみなさい。

練習問題2

  1. BMIは25以上で「肥満」とされている。準備問題で計算したBMIのデータとIF関数を使って、肥満ならば「肥満」、そうでなければ「OK」と表示する計算式が入った列をつくりなさい。
  2. BMIは18.5未満で「低体重」とされている。準備問題で計算したBMIのデータとIF関数を使って、低体重ならば「やせすぎ」、そうでなければ「OK」と表示する計算式が入った列をつくりなさい。

例題2. 賃金計算

労働基準法では法定労働時間を超えた場合には賃金率(時給)に割り増しが必要となる。具体的には1日に8時間以上働いた場合は、8時間を超えた部分については25%以上の割り増しが必要となる。

data05.xlsx残業手当 シートには、タイムカードで記録した始業時刻と終業時刻が記録されている。このデータを使って、

  1. まず終業時刻と始業時刻を使って一日の就業時間を計算する。
  2. 上で計算した就業時間が8時間を超えていたら、超えた分については25%の割増賃金を適用して賃金を計算する。

という操作を行ってみる。

Step 1. 就業時間の計算

終業時刻−始業時刻 で就業時間が計算できる。ただし、この終業時間だと1時間の休憩時間が必要なので、
就業時間 = 終業時刻−始業時刻−1時間
で計算できる。このデータでは、時間と分が分けて入力されているので、差を取るとき分の分は1/60にして時間単位にしてから計算しないと話が屋個敷くなることに注意。

8:05〜20:19まで働いて、12時間14分。休憩時間が1時間あるので就業時間は11時間14分。14分を60で割って時間単位にすると、0.233333333333となるので上の「就業時間」の欄は11.2333333となっている。

Tips. Excelでの時刻と日付の扱い

Step 2. 所定内賃金の計算

日の所定労働時間(この場合は8時間)以内の労働時間については、通常の時給(データ例では900円になっている)が適用される。労働時間全体で8時間を超えている場合は、8時間までは通常の時給、8時間を超えた分は割増賃金として計算する。つまり、所定内賃金を計算するためには、

という計算を行う必要がある。このような場合分けは IF関数で行えばよい。

セル G6 ← =IF(F6<=8, G$1*F6, G$1*8)

この式の意味は、「F6セルの値(つまり、就業時間)が8時間以下ならばF6の値に時給を乗じて賃金を計算し、8時間を超えている場合は8時間分までを通常の時給で計算する」ということになる。

Step 3. 所定外賃金の計算

所定外賃金は所定労働時間(ここでは1日8時間)を超えた労働時間に適用される。割増率は法定での最低で25%としておこう。

これをExcelの計算式にすると、

セル H6 ← =IF(F6<=8, 0, 125%*G$1*(F6-8))

のようになる。

Step 4. 所定内賃金+所定外賃金で日給を計算する

これは単に足し算をおこなうだけ。

練習問題3.

例題2の計算式では、所定労働時間と賃金割増率はそれぞれ 8時間、25%という定数で計算式に入れてあった。これをそれぞれG2, G3セルに入っているデータを参照するように変更しなさい。

練習問題4

例題2の計算式では22時〜5時の深夜時間帯の割増(さらに最低25%追加)の部分を計算していない。始業時刻、終業時刻のデータを使ってこの部分を計算する方法を考えてみなさい。

練習問題5

例題2と同じデータを、Excelのシリアル値を使って入力したものが残業手当2 シート。このデータを使って同じような計算をしてみなさい。

(注意)書式が「時刻」や「日付」になっているセルのデータをつかって計算すると、計算式が入っているセルの書式も自動的に時刻や日付になってしまう。ここでは、「就業時間」の計算式が入っているセルが自動的に「時刻」に書式設定されてしまう。当然、就業時間としてはマトモに表示されないことになるので、書式を「標準」に再設定する必要がある。

2. 複数の条件を組み合わせた場合分けが必要な計算式

例題3. メタボリック診断

2008年の春から実施されている健康診断におけるメタボリック判定は、ウェストサイズが男性の場合85cm以上、女性の場合90cm以上であればいくつかの検査値と組み合わせて判定することになっている。つまり、性とウェストサイズの2つの条件を組み合わせて判断を行うことになる。

Step 1. 条件を整理する

この条件を整理するとこんな感じ。性と85cm, 90cmが条件になってることがわかる。

   ウェスト85cm未満 ウェスト85cm以上  ウェスト90cm以上 
 女性  非メタボ 非メタボ  メタボ 
 男性  非メタボ  メタボ メタボ 

Step 2. 疑似コードを使って条件を IF関数の書式に落とし込んでいく

これをIF関数の書式に落とし込んでいくことを考える。まず性で判断することを考えると、

IF(女性?, ウェスト90cm以上ならメタボ, ウェスト85cm以上ならメタボ)     ①

という感じになる(*2)。もちろんこのままではExcelに入力できないが、こんな感じの擬似コードで問題を整理するのは悪くない。

さらに、「ウェスト90cm以上ならメタボ」「ウェスト85cm以上ならメタボ」という部分はそれぞれIF関数を使って記述することができる。

IF(ウェスト90cm以上, "メタボ", "非メタボ")      ②
IF(ウェスト85cm以上, "メタボ", "非メタボ")      ③

さて、①〜③を組み合わせてみるとこんな風になる。

IF(女性?, IF(ウェスト90cm以上, "メタボ", "非メタボ"), IF(ウェスト85cm以上, "メタボ", "非メタボ"))

Step 3. データが入っているセルなどを考慮して、Excelの関数として記述する

セルF2 ← =IF(B2="女性", IF(E2>=90, "メタボ", "非メタボ"), IF(E2>=85, "メタボ", "非メタボ"))

できあがりはこんな感じ

(*2)この式は性別が「女性」と「それ以外」に分けているが、「それ以外」の方の処理は「男性」を前提とした処理になっている。女性でも男性でもないような性別の人がいるデータ群を扱う場合はもう少し考慮する必要があるが、ここではそこが本質ではないのでスルーする。

Tips: IF関数とフローチャート

練習問題6

BMIは25以上で「肥満」、18.5未満で「低体重」、その中間が「普通体重」とされている。準備問題で計算したBMIのデータとIF関数を使って、それぞれの人が「低体重」、「普通体重」、「肥満」のいずれであるか表示しなさい。

練習問題7

A, B, Cの三科目を受験し、合格するためには以下の2つの条件のいずれかを満たしている必要がある。data05.xlsx ブックの 試験得点 シートのデータを使って、合否を判定する計算式を作りなさい。

  1. A, B, Cそれぞれの科目の合格点は60点である。3科目全てに合格すれば、試験全体も合格。
  2. A, B, Cそれぞれの科目の合格点は60点である。いずれか2科目合格していて、合計点が230点を超えていれば試験合格。

練習問題8

ある試験の評価は、素点が60点未満で「不可」、60〜69点で「可」、70〜79点で「良」、80〜89点で「優」、90〜100点で「秀」であるとする。data05.xlsxブックの成績評価シートのデータを使って、成績評価を行う計算式を作成しなさい。

練習問題9

例題2で扱ったメタボリック検診の条件は、以下のように整理することができる。この条件を用いたIF関数で例題2と同じ処理を行ってみなさい。

((性別=男性) かつ (ウェスト >=85cm)) または ((性別=女性) かつ (ウェスト >= 90cm)) であれば「メタボ?」

ヒント: Excelでは、「かつ」を表すためには AND関数、「または」を表すためには OR関数を用いる

確認問題
data05.xlsx ブックの 確認 シートに入っているデータを用いて、60点以上、80点未満の人の数を数えなさい(ヒント: 条件を満たす場合に 1、満たさない場合に 0となるような 計算式を作れば、SUM関数を使って人数が数えられる)

↑経済情報処理(2012)ホームページに戻る