アプリ版:「スタンプのみでお礼する」機能のリリースについて

LibreOfficeの表計算のifの条件式について
わからない点があります。

A1からA9までテストの点(満点100)が入力されています。

問題は
【59以下なら『C』、79以下なら『B』、100以下なら『A』とする。】
とあります。

なので(1)~(4)の導けそうな日本語文を考え
その条件で入力しましたが、
(4)しか正しく導けませんでした。
(1)~(3)のダメな点は一体どこなんでしょうか?

何しろ初心者なもので、あまり専門用語を使わず
噛み砕いてご回答してくださるとよりありがたいです。

是非、よろしくお願いします。

(1)、100以下なら『A』、80未満を『B』、60未満を『C』とする。
 =if(a1<=100,"A",if(a1<80,"B",if(a1<60,"C","")))
 →全部がAになる

(2)、100以下なら『A』、79以下を『B』、59以下を『C』とする。
 =if(a1<=100,"A",if(a1<=79,"B",if(a1<=59,"C","")))
 →全部がAになる

(3)、60未満を『C』、80未満を『B』、それ以外を『A』とする。
 =if(a1<60,"C",if(a1<80,"B","A"))
 →全部がCになる

(4)、60未満を『C』、80未満を『B』、100以下を『A』とする。
 =if(a1<60,"C",if(a1<80,"B",if(a1<=100,"A","")))
 →ちゃんとなる。

A 回答 (3件)

問題の条件は、判りきったことを省略していますが、数式ではその「判りきったこと」まで厳密に記述しなければなりません。



> 【59以下なら『C』、79以下なら『B』、100以下なら『A』とする。】

これを判定すると、「59以下なら『C』」を判定し終えて次の「79以下なら『B』」を判定するときには、59以下のデータはふるい落とされて無くなっているから問題ないですが、もし最初に二番目の条件である「79以下なら『B』」を判定したら?「79以下」には「59以下」も含まれているから、本来はCにすべき数もBと判定されてしまいます。後に「59以下だったら」なんて判定が出てきても、すでに判定済みの結果は変わりません。

失敗例に出てきた「100以下はA」のような条件では、0~100が全部合致してしまいます。複数の条件を判定する場合は、先に出てくる条件が後続の条件を含まないようにしなければなりません。(4)がうまくいったのは、そのような条件判定になっているからです。もし(4)の式の60と80が逆だったら、やっぱりうまくいきませんね。

とまあ、判断の順番も大切なんですが、3段階評価だったらトップグループAと赤点グループCを判定して残りをBにする方法もあり、これだとAとCのどちらを先に判断しても正しい答えになります。

=IF(A1>79,"A",IF(A1<=59,"C","B"))
=IF(A1<=59,"C",IF(A1>79,"A","B"))

判定する順序が変わっても結果が一定な条件式の方が、勘違いでずっこける危険が無く、安全性が高いです。そうすることで間違える危険が減るのならば、少しくらい式が長くなっても、そのように表記した方が良いことも多いでしょう。

この回答への補足

今回、皆様のご回答全てが私にとってとても意味のあるものに
なりました。

ベストアンサーはちょっと迷いましたが
一番詳しくご回答してくださったRandenSai様に決めました。


少しドつぼにはまるだけで
簡単なことや基本的なことでつまずいたり
その問題を解くのに
それ知らなかったらお話にならんでしょ
というようなことも多々ある私ですが
今後また、どうしても行き詰った時には
皆様のお力はとても頼りになりますので
よろしくおねがいします。

補足日時:2014/09/17 10:32
    • good
    • 0
この回答へのお礼

RandenSai様、ご回答ありがとうございます。

『ふるい落とす』この表現が、ものすごく
わかりやすかったです。
思わず
『ほぁ~なるほど』と言って納得してしまいました。
※ふざけてるように聞こえますが、真面目です。

>3段階評価だったら
 トップグループAと赤点グループCを判定して
 残りをBにする方法
→この方法も目からウロコで、
 柔軟性の少ない私の脳に、
 新鮮なスパイスを与えられたかのような
 感動を覚えました。
 3段階評価の時は今後この方法を
 是非利用させていただこうと思いました。

 本当に助けていただいて
 ありがとうございました。

お礼日時:2014/09/17 10:31

こんにちは!


No.1さんが仰っている通りで、

IF関数をネストする場合は優先順位があります。
最初のIF関数が最優先、次のIF関数が2番目・・・となります。
(1)(2)の数式を使いたい場合は不等号の向きから判断すると
小さい方からIF関数の条件にしてやります。

不等号を逆向きにすると
=IF(A1>=80,"A",IF(A1>=60,"B","C"))
といった感じにします。

(3)(4)はおそらくちゃんと表示されるのでは?m(_ _)m
    • good
    • 0
この回答へのお礼

tom04様、ご回答ありがとうございます。

>IF関数をネストする場合は優先順位があります
>小さい方からIF関数の条件にしてやります
→if関数に優先順位があることもしらなかった上に
 小さい方から条件にしてあげるということすら
 知らなかったので、とても私にとっては勉強になります。

>おそらくちゃんと表示されるのでは?m(_ _)m
→(3)についてはご指摘があったので
 もう一度当てはめてみると
 ちゃんと導けました。

 条件とか組み立てとかそれ以前の問題でした…
 その時間違った原因は一体なんだったんだろうか…


 自分で色々質問する前にかなり、考えて調べたつもりだったのですが
 まだまだ努力も知識も全然足りないようですね(汗)

 このドつぼにはまった状態を抜けることができたので
 前より一層
 『よっしゃ!勉強しなおすで!』
 という気持ちで私は燃えています。

 本当に助けていただいて
 ありがとうございました。

お礼日時:2014/09/17 10:28

(1) の場合なら、「100以下なら『A』」で、判定が終わってしまうからです。

    • good
    • 0
この回答へのお礼

mpascal様、ご回答ありがとうございます。


恥ずかしながら、if文に優先順位があったなんて知らなかったです。
何がおかしいのか、条件がおかしいのか、組み立てがおかしいのか
色々自分で調べて考えたつもりだったんですが、
まだまだ基本中の基本の知識もないようです。

端的に指摘してくださったので
まず、(1)について考える時
ifの組み立てそのものに注目して
考え直すことができました。

と、同時に
『もっと基礎にあたることを勉強しなおさないと!』
と学ぶ気持ちが強くなりました。

本当に助けていただいて
ありがとうございました。

お礼日時:2014/09/17 10:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!