表計算のifの条件式について

このQ&Aのポイント
  • 表計算のifの条件式について初心者向けに説明します。
  • LibreOfficeの表計算でのifの条件式について悩んでいる一例を解説します。
  • 表計算ソフトで使用するifの条件式について詳しく説明します。
回答を見る
  • ベストアンサー

表計算のifの条件式について

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","")))  →ちゃんとなる。

質問者が選んだベストアンサー

  • ベストアンサー
  • RandenSai
  • ベストアンサー率54% (305/561)
回答No.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")) 判定する順序が変わっても結果が一定な条件式の方が、勘違いでずっこける危険が無く、安全性が高いです。そうすることで間違える危険が減るのならば、少しくらい式が長くなっても、そのように表記した方が良いことも多いでしょう。

vayasicof
質問者

お礼

RandenSai様、ご回答ありがとうございます。 『ふるい落とす』この表現が、ものすごく わかりやすかったです。 思わず 『ほぁ~なるほど』と言って納得してしまいました。 ※ふざけてるように聞こえますが、真面目です。 >3段階評価だったら  トップグループAと赤点グループCを判定して  残りをBにする方法 →この方法も目からウロコで、  柔軟性の少ない私の脳に、  新鮮なスパイスを与えられたかのような  感動を覚えました。  3段階評価の時は今後この方法を  是非利用させていただこうと思いました。  本当に助けていただいて  ありがとうございました。

vayasicof
質問者

補足

今回、皆様のご回答全てが私にとってとても意味のあるものに なりました。 ベストアンサーはちょっと迷いましたが 一番詳しくご回答してくださったRandenSai様に決めました。 少しドつぼにはまるだけで 簡単なことや基本的なことでつまずいたり その問題を解くのに それ知らなかったらお話にならんでしょ というようなことも多々ある私ですが 今後また、どうしても行き詰った時には 皆様のお力はとても頼りになりますので よろしくおねがいします。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! No.1さんが仰っている通りで、 IF関数をネストする場合は優先順位があります。 最初のIF関数が最優先、次のIF関数が2番目・・・となります。 (1)(2)の数式を使いたい場合は不等号の向きから判断すると 小さい方からIF関数の条件にしてやります。 不等号を逆向きにすると =IF(A1>=80,"A",IF(A1>=60,"B","C")) といった感じにします。 (3)(4)はおそらくちゃんと表示されるのでは?m(_ _)m

vayasicof
質問者

お礼

tom04様、ご回答ありがとうございます。 >IF関数をネストする場合は優先順位があります >小さい方からIF関数の条件にしてやります →if関数に優先順位があることもしらなかった上に  小さい方から条件にしてあげるということすら  知らなかったので、とても私にとっては勉強になります。 >おそらくちゃんと表示されるのでは?m(_ _)m →(3)についてはご指摘があったので  もう一度当てはめてみると  ちゃんと導けました。  条件とか組み立てとかそれ以前の問題でした…  その時間違った原因は一体なんだったんだろうか…  自分で色々質問する前にかなり、考えて調べたつもりだったのですが  まだまだ努力も知識も全然足りないようですね(汗)  このドつぼにはまった状態を抜けることができたので  前より一層  『よっしゃ!勉強しなおすで!』  という気持ちで私は燃えています。  本当に助けていただいて  ありがとうございました。

  • mpascal
  • ベストアンサー率21% (1136/5195)
回答No.1

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

vayasicof
質問者

お礼

mpascal様、ご回答ありがとうございます。 恥ずかしながら、if文に優先順位があったなんて知らなかったです。 何がおかしいのか、条件がおかしいのか、組み立てがおかしいのか 色々自分で調べて考えたつもりだったんですが、 まだまだ基本中の基本の知識もないようです。 端的に指摘してくださったので まず、(1)について考える時 ifの組み立てそのものに注目して 考え直すことができました。 と、同時に 『もっと基礎にあたることを勉強しなおさないと!』 と学ぶ気持ちが強くなりました。 本当に助けていただいて ありがとうございました。

関連するQ&A

  • IF関数の条件がわかりません

    ExcelのIF関数の条件でわからないので教えてください。 「6%以下かつ50,000以下だと判定A、6%以下かつ30,000以上50,000未満は判定B、それ以外はC」 問題の解答ですと、VLOOKUPを使用するみたいですが、検定でわざわざ参照する表を使用しないといけないので、IF関数のみで出来るならその回答を教えていただけますか? よろしくお願いします。

  • EXCEL IF関数について教えて下さい。

    テストの結果表を作成しようと思います。 以下のようなランク付けをしたいと思います。 IF関数を使うことになると思いますがやり方を教えて下さい。 100点満点 90点~100点はA 80点~89点はB 70点~79点はC 60点~69点はD 50点~59点はE 40点~49点はF 30点~39点はG 29点以下H 尚、点数を入力するとランクが自動的に出るようにしたいと 思います。 どなたか教えてください。 宜しくお願いします。

  • 表計算のifの条件(うるう年の計算)

    LibreOfficeの表計算のifの条件で わからない点があります。 問題は 【A1からA10まで1600から100とばしに2600まで入ってます。  そして、それぞれうるう年であるか平年であるかを調べます。  条件は、  西暦の年数が4で割り切れ数字は原則『うるう年』  例外として、西暦が100で割り切れる年は『平年』とする  さらに例外として西暦が400で割り切れる年は『うるう年』とする】 という内容です。 ちなみに1600、2000、2400でうるう年と表示されれば正解です。 導き方がわからなかったので解答をみたら (1)が解答でした。 そこで、(2)から(6)まで導けそうな日本語文を考えて、それを 条件としてあてはめてみました。 しかし、(1)と(2)以外は導けませんでした。 なぜ、(3)~(6)は導くことができなかったのでしょう? orとandの順番を入れ替えただけで何故導けなくなったのでしょう? これはifで導こうと思ったら、(1)または(2)でしか 導けない内容なのでしょうか? あまり知識がないので、噛み砕いて教えてくださるとより ありがたいです。 是非、よろしくお願いします。 (1)、400で割り切れるか、あるいは(or)、   4で割り切れて、そして(and)、100で割り切れない場合   『うるう年』、そうでない年を『平年』とする。  =if(or(mod(a1,400)=0,and(mod(a1,4)=0,mod(a1,100)<>0)),"うるう年","平年")  →ちゃんとなる。 (2)、400で割り切れない、あるいは(or)   100で割り切れ、そして(and)4で割り切れない場合   『平年』、そうでない年を『うるう年』とする。  =if(or(mod(a1,400)<>0,and(mod(a1,100)=0,mod(a1,4)<>0)),"平年","うるう年")  →ちゃんとなる。((1)を元に平年とうるう年の条件を入れ替えてみた) (3)、4で割り切れて、そして(and)、100で割り切れない   あるいは(or)400で割り切れる場合   『うるう年』、そうでない年を『平年』とする。  =if(and(mod(a1,4)=0,mod(a1,100)<>0,or(mod(a1,400)=0)),"うるう年","平年") →全部平年になる((1)のandとorを入れ替えただけ) (4)、100で割り切れ、そして(and)4で割り切れない   あるいは(or)400で割り切れない場合   『平年』、そうでない年を『うるう年』とする。  =if(and(mod(a1,100)=0,mod(a1,4)<>0,or(mod(a1,400)<>0)),"平年","うるう年") →全部うるう年になる((2)のandとorを入れ替えただけ) (5)、400で割り切れ、そして(and)4で割り切れ、   かつ(and)100で割り切れない場合   『うるう年』、そうでない年を『平年』とする。  =if(and(mod(a1,400)=0,mod(a1,4)=0,mod(a1,100)<>0),"うるう年","平年")  →全部平年になる。   ifとandで作ってみた。 (6)、400で割り切れ、そして(and)4で割り切れ、   かつ(and)100で割り切れない場合   『うるう年』、そうでない年を『平年』とする。  =if(mod(a1,400)=0,if(mod(a1,4)=0,if(mod(a1,100)<>0,"うるう年","平年")))  →1600,2000,2400年は平年になり、それ以外はFALSEと表示される。   ifの中にifを入れる文を作ってみた。

  • 【ExcelVBA】IF条件を満たしているのに、IF条件のところで止まってしまう

    Sub test1() 変数1 = IsEmpty(Range("C1")) If Range("A1") > 0 And Range("B1") = 0 And 変数1 = True Then   test2 End If End Sub 止まったときのデバッグでの表示は Range("A1")は「100」(セルの中身) Range("B1")は「0」(セルの中身) 変数1はRange("C1")がエラー表示なので「True」 すべての条件を満たしているのですが、 IF条件のところで止まってしまいます。 (IF条件のところの1行が黄色くハイライトになっている状態) 止まったデバッグの後に、F5を押して実行させると、 IF条件の続きから実行されて、test2が実行されて処理が終了します。 何で、IF文のところで一度止まってしまうのかわかりません。

  • ifの条件式 Andを使用するものについて

    phpで、 $a="あいうえお"; $b="かきくけこ"; $c="かきくけこ"; と変数を三つ宣言しました。 上の変数三つを利用して、以下条件のif文を作りたいと思いました。  条件:$a変数 と $b変数が異なり、かつ $b変数 と $c変数の内容が同じとき「処理A」を実行させる。 ○作成したif文 if(($a <> $b) && ($b == $c)){  処理A } と記述したのですが、 ifブロック処理Aが実行されません。 なぜなのでしょうか…。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • 判定のためのエクセルの数式について質問します。

    3点満点のテスト(面接で接客でも)が4種類あります(12点満点)。以下エクセル表    テスト1 テスト2 テスト3 テスト4  合計 判定 A君  3    3     3     2    12  A (11点以上をA)   B君  2    3     2     2     9  B (10点~6点をB) C君  1    1     2     2     6  B D君  1    2     1     1     5  C (5点以下をC) 問題は次のE君の場合です。合計は6点なので、点数だけだと判定は「B」ですが、「1」が3つあるので判定を「C」となるようにしたいのですが、どうしてもうまい数式が作れません。 E君  1    3     1     1     6  C← 以下の式だとBになります。 =IF(セル>=11,"A",IF(セル<6,"C","B")) ではだめで、これから先が進みません。全く別の式がよいのでしょうか。教えてください。よろしくお願いします。

  • Excelの複数の条件にあった式を教えて下さい。

       A     B     C    D    E 1   4.7          16    8    3 2  5.8          0.0   3.0   6.0 3  4.5 4  2.16 5  3.55    ・    ・      ・    ・   Aの列には1日の平均気温が入力されています。(A31まで) B1に、「A1が16℃以上だったら0.0、8℃以上16℃未満だったら3.0、3℃以上8 ℃未満だったら6.0」と式を作り、B2から下の欄も、「  」内の条件でした いのですが、教えてもらえないでしょうか? 宜しくお願いします。 あらかじめ、C1~E1に16℃、8℃、3℃と言う意味で数字を入れています。 C2~E2にも、条件を満たしたら、この数字になりなさいという意味で数字を 入れています。 IF文を使ってB1に =IF(A1>C1,”0.0”,IF(D1≦A1>C1,”3.0”,IF(E1≦A1>D1,"6.0",""))) と式を入れたのですが、#NAMEとエラーが出てきます。

  • Excel でIFを使った複数条件の式を教えてください

    お世話になります。 Excelでの入力で困っています。 以下のような条件での式なのですが・・・ セルA1*B1の値が 100,000以下の場合200と出力 100,001以上で200,000以下の場合250と出力 200,001以上は場合450と出力 自分で作った式は IF(A1*B1>200000,450,IF(A1*B1>100000,250,200)) なのですが、上手くいきません。 関数はあまりあつかったことがないので、どなたかご教示いただけると 助かります。 よろしくお願いします。

  • 条件分岐(if)について

    条件分岐(if)についてお聞きしたことがあります。 例えば if($a == 'A' || $a == 'B'){ 処理 }else if($a == 'C' || $a == 'D' || $a == 'E'){ 処理 }............... といった条件分岐があったとて、お聞きしたいことが2点あります。 ・条件分岐この後も数十個続いたとします。その場合もelse ifで一つ一つ 条件を書かなければならないのでしょうか? ・条件式if($a == 'A' || $a == 'B'....)が長くなる場合プログラムが見にくくなるので 別途に条件式を書いておいてif文の所では($a == ◯)といったように簡潔に書くことは できないのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • エクセル 複数条件のIF関数 

    0から360の数字がランダムに入力されているA列があります。この数字を以下の条件でB列に入力したいのです。 (1)288以上なら280を引く (2)144以上なら144を引く (3)72以上なら72を引く (4)72未満ならその数字のまま入力 結果として、72未満の数字がB列に入力されることになります、 IF関数を使えばできるのかなと思いますが、違う方法でもよいです。 4万セルくらいを処理するので一番簡単な方法を教えてください。 よろしくお願いいたします。

専門家に質問してみよう