• 締切済み

EXCELのIF関数の条件分岐について

基本使用量が8以下の場合は1620円のみですが、 基本使用量が8以上の場合、超過分として、使用料に応じて計算が変わってくる条件分岐をIF関数で考えています。 基本使用量8~30まで→(今月使用料-8)×160円      31~50まで→(今月使用料-8)×220円      51~→(今月使用料-8)×330円 こういったものを、基本使用料金と、従量料金と別項目として 表示させたい場合、どのような関数を書けばよいか教えてください。 お願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

およそこういうパターンはVLOOKUP関数のTRUR型が向いていると思っています。 下記でやってみて、使うと障害(カバーできない仕様点)があるかどうか考えてみてください。 >8以下の場合は1620円のみですが、基本使用量が8以上の場合、超過分として、・・など「以上」の使い方に質問者に不安を覚えるので、いちばんよく知っている人=質問者に任せます。 「引く表」(ルール表というか)を作る。どこでも良いが仮に(別シートでも可能) G1:H4に 0 0 0 9 8 160 31 8 220 51 8 330 ーー テスト用にA列に1-55ぐらいまでの連続数をオートフィルで作る(0からが良いのかも) B1に =VLOOKUP(A1,$G$1:$I$4,2,TRUE) C1に =VLOOKUP(A1,$G$1:$I$4,3,TRUE) と入れて、B1:C1をB55:C55などに式を複写する。 D1に式 =(A1-B1)*C1 を入れてD55まで式を複写する。 あと基本料金をE列に入れる。 ーー 結果 A1:E55の一部 1 0 0 0 1620 2 0 0 0 1620 3 0 0 0 1620 4 0 0 0 1620 5 0 0 0 1620 6 0 0 0 1620 7 0 0 0 1620 8 0 0 0 1620 9 8 160 160 1620 10 8 160 320 1620 11 8 160 480 1620 12 8 160 640 1620 13 8 160 800 1620 14 8 160 960 1620 15 8 160 1120 1620 16 8 160 1280 1620 17 8 160 1440 1620 18 8 160 1600 1620 19 8 160 1760 1620 20 8 160 1920 1620 21 8 160 2080 1620 22 8 160 2240 1620 23 8 160 2400 1620 24 8 160 2560 1620 25 8 160 2720 1620 26 8 160 2880 1620 27 8 160 3040 1620 28 8 160 3200 1620 29 8 160 3360 1620 30 8 160 3520 1620 31 8 220 5060 1620 32 8 220 5280 1620 ーー 上記では、説明のため列を分けていますが、1セルの式にまとめられルのはご存知と思います。 上記の体系(特に基本料金の扱い)でよいと思うが、質問表現が 厳密でなく、私の質問のとり方がまちがっているかも知れない。 区切りである9、31,51は、以上・以下・未満・越えるなどの点から、上記結果表をみて、プラマイ1ほど修正が必要かもしれない。 ーー なぜIFを使わないか (1)勉強の進歩がとまる。過去質問を見ていると初心者は必ずIFで質問してくる。 (2)IFを重ねると、仕組みが浮かび上がらない。第3者が見て   すぐには良くわからない。VLOOKUPも知らない人には同じかも知れないが。 文章やIF関数では浮かび上がりにくい構造があらわになる。 (3)テストがVLOOKUPの方がアンシン。区間の間はまず余りエラーが 起こらない。区間前後だけ神経を使って表を作って置けばよい。 IFはそうでも無いと思う。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

IF関数を使って、 従量料金を別項目 として計算する場合の一例です。 A2セルに今月使用量が入力されているとしたら、 例えば、B2セルに =IF(A2<8,0,IF(A2<31,(A2-8)*160,IF(A2<51,(A2-8)*220,(A2-8)*330))) とすれば、従量料金が計算できます。 余談ですが、 IF文の条件分岐が多くなると間違いやすいので、 エクセル上では、「Alt」+「Enter」で改行させながら入力 するといいですよ。 <イメージ> =IF(A2<8,0,  IF(A2<31,(A2-8)*160,   IF(A2<51,(A2-8)*220,        (A2-8)*330))) ただし、分岐があまりに多くなる場合は、#1さんのように VLOOKUP関数を使う方が良いと思いますよ。 もちろん、シート上に料金リストを作成して範囲を参照しても 良いかと思います。

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.4

無理やりIF文で書くと、例えばこうなります 基本料金は別セル表示として =IF(A1>50,13860+(A1-50)*330,IF(A1>30,4840+(A1-30)*220,IF((A1>8),(A1-8)*160,0))) 税金の速算控除みたいな考え方を使えば、IF文で処理可能です。 でも、#1さんのようにlookupを使うのがスマートですよね。 #2さんの疑問ももっともで、電気料金の場合は、各ゾーン毎に料金を計算するようになってます。 たとえば、8-30の分は@160、31-50の分は@220という感じです。 この場合は、上記IF文の中の定数部分を修正すれば対応可能です。

回答No.3

50と51の間もですね。不思議な料金体系です。 50: 9240 51: 14190

noname#40742
noname#40742
回答No.2

#1さんの式を検証していて思ったのですが、 30:5140円 31:6680円 節目でバーンと跳ね上がってしまうのですが、 質問者さん、これはこれで正しいのでしょうか?

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例ですが、8以下、9~30、31~50、51以上として次の方法は如何でしょうか。 =1620+($A1-8)*LOOKUP($A1,{0,9,31,51},{0,160,220,330})

chaa0417
質問者

お礼

あ~~!! できましたっ。ありがとうございました。 LOOKUP関数っていうのですか?ちょっと調べてみます。 助かりました。感謝しています。