Excelで4つの条件で計算式を変える方法とは?

このQ&Aのポイント
  • Excelで4つの条件で計算式を変える方法について試行錯誤しています。
  • A1のセルに「あいう」か「いろは」、B1のセルに「A」か「B」の値が入るとし、組み合わせはあいう・A、あいう・B、いろは・A、いろは・Bの4通りになります。
  • あいう・Aの場合は(C1-D1)*10、あいう・Bの場合は(D1-C1)*10、いろは・Aの場合は(C1-D1)*500、いろは・Bの場合は(D1-C1)*500の計算式を当てはめてE1セルに表示させたいですが、IF関数やAND関数を使用してもうまく表示されません。どのように関数を書けば正しく表示されるのでしょうか?
回答を見る
  • ベストアンサー

Excelで4つの条件で計算式を変える

できるのかできなのかもわからず、試行錯誤してましたが、途方に暮れています。 A1のセルに「あいう」か「いろは」 B1のセルに「A」か「B」 の値が入るとすると、組み合わせは あいう・A あいう・B いろは・A いろは・B の4通りになりますが、この4通りに違う式を当てはめてE1セルに表示させたいのです。 あいう・Aの時は、(C1-D1)*10 あいう・Bの時は、(D1-C1)*10 いろは・Aの時は、(C1-D1)*500 いろは・Bの時は、(D1-C1)*500 のような感じですが、IF関数、AND関数いろいろやってみましたが、「あいう」のA、Bくらいなら大丈夫ですが、「いろは」も含めるとエラーになってしまいます。   どのように関数書けばちゃんと表示される(答えがでる)でしょうか。 =IF(A1="あいう",IF(B1="A",(C1-D1)*10,(D1-C1)*10)) ↑これなら「あいう」でA、Bに分けるのはいいと思うのですが、ここから先がよくわかりません。 「いろは」でも同じ様に分けたいのです。 このIF関数、A1が「あいう」だったら、B1が「A」の場合(C1-D1)*10 そうじゃない場合(Bの場合)は(D1-C1)*10の解釈で、偽の場合にIF関数使ってA1に「いろは」だったらのような感じでIF関数入れればなんとかなるのかな?と考えましたが、そもそもその考え方がおかしいのでしょうか?

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.1

=IF(A4="あいう",IF(B4="A",(C4-D4)*10,(D4-C4)*10),IF(A4="いろは",IF(B4="A",(C4-D4)*500,(D4-C4)*500),"")) でいかがですか。 =IF(A1="あいう",IF(B1="A",(C1-D1)*10,(D1-C1)*10)) 最初のIFでなければ(偽の場合)のところが抜けてましたので、A1が「あいう」でなければFALSEと表示されてたと思います。「あいう」以外の選択肢がない場合、空白にすることが多いです。 =IF(A1="あいう",IF(B1="A",(C1-D1)*10,(D1-C1)*10),"") ので""のところにIFのいろはを入れました

ojimaty2003
質問者

お礼

早速の回答ありがとうございます。 やってみました! ちゃんと表示されました! ありがとうございます。 書いてもらって見れば、なるほど~って思うんですが、いざ自分でやるとドツボにはまります(笑)

その他の回答 (4)

  • SI299792
  • ベストアンサー率48% (709/1465)
回答No.5

まず、整理をします。 あいうの時 10 いろはの時 500 A の時 C1-D1 B の時 D1-C1 もし、あいう、いろは、A B 以外はいらないのであれば =IF(B1="A",C1-D1,D1-C1)*IF(A1="あいう",10,500) でいいです。これが一番解りやすいと思います。 それ以外の場合空白にしたいのであれば =IF(AND(OR(A1="あいう",A1="いろは"),OR(B1="A",B1="B")),IF(B1="A",C1-D1,D1-C1)*IF(A1="あいう",10,500),"") それ以外の場合0にして、セルの書式設定で空白にする方法もあります =IF(B1="A",C1-D1,IF(B1="B",D1-C1))*IF(A1="あいう",10,IF(A1="いろは",500)) 書いてある通りを数式にしてみましたが、長くなりました。 =IF(AND(A1="あいう",B1="A"),(C1-D1)*10,IF(AND(A1="あいう",B1="B"),(D1-C1)*10,IF(AND(A1="いろは",B1="A"),(C1-D1)*500,IF(AND(A1="いろは",B1="B"),(D1-C1)*500,"")))) =ifsを使っても長くなるので、やめた方がいいです。

ojimaty2003
質問者

お礼

回答ありがとうございます。 返事が遅れてしまって申し訳ございませんでした。

  • kon555
  • ベストアンサー率52% (1738/3330)
回答No.4

 既にif文の完成系は回答がついていますので、複数のif文を組み合わせた書き方についての考えかたなどを。  こうした書き方はネスト(入れ子)と言われます。基本的にはif文で「真なら〇〇、偽なら次のif」で書けばよく、まさに貴方が書かれている考え方がズバリ正解です。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/waza/if01.html  ただこの入れ子構造、慣れればスルスル書けるのですが、慣れるまでは大変だと思います。if関数のウィザードもネストには対応していないので。  なので実務的なオススメとしては、慣れるまでは以下のような手順でやる事です。 1.別々のセルでif関数を1つずつ作成。2.作成したif文について、編集モードで計算式をコピー。 3.入れ子にしたい対象のif文について編集ウィザード立ち上げ。真・偽の結果に、コピーしたif文をペーストして上書き。 4.あとは延々繰り返し  この手順でいくと、比較的スムーズに入れ子でのifが作成できます。  今回書かれた条件で言うと、 「=IF(B1="A",(C1-D1)*10,"")」(あいう・『A』の時) 「=IF(B1="B",(D1-C1)*10,"")」(あいう・『B』の時) 「=IF(B1="A",(C1-D1)*500,"")」(いろは・『A』の時) 「=IF(B1="B",(D1-C1)*500,"")」(いろは・『B』の時)  の4つとをまず作ります。この時にあいう・いろは、は構文の中では気にしません。  次にこの4つのペアを合体させます。とは言え作業としては、空白にしておいた偽の場合の部分にペーストするだけです。 「=IF(B1="A",(C1-D1)*10,IF(B1="B",(D1-C1)*10,""))」(あいう・『A』『B』) 「=IF(B1="A",(C1-D1)*500,IF(B1="B",(D1-C1)*500,""))」(いろは・『A』『B』)  これで1つ分の入れ子構造ができました。あとはこれを繰り返していけば、延々と入れ子を重ねていく事が出来ます。  ただ入れ子になった条件式は中々理解しにくいですので、あんまり複雑なものを作るのはおすすめしません。ほどほどでやめておきましょう。

ojimaty2003
質問者

お礼

返事が遅くなってしまい申し訳ございません。 回答ありがとうございます。   考え方までご教示いただきありがとうございます。 一気に作ろうとするとこんがらがるので、細かく考えて後でつなげてく方式がわかりやすいですね!

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

・小生はIF関数のネストが嫌い、なのと ・VBAに興味があるので 下記を考えた。 Case分のネストです。 条件の記述が、表のように記述できて、その面ではわかりやすいと思った。 でもVBAに馴染みのない人には、意味ないかな? ーーー 例データ A1:D7 E列は(私製)関数を入れた結果です。 E列は関数の結果。 A列  B列  C列  D列   E列(結果) 式≌のタイプ。私の仮に作った計算式 結果は、「私の作った計算式」による結果です。実際はVBAのコードの中を、質問者の式に、改めてください。 E1の式は、=aaa(A1,B1,C1,D1)で、素の式を下方向に複写してください。aaaは意味なし、関数名であって、手抜きした。 あいう A 100 1000 -900   c-d あいう B 200 2000 2200   c+d いろは A 300 3000 -2698   (c-d)+2 いろは B 400 4000 4402   (c+d)+2 あいう B 500 5000 5500 いろは B 600 6000 6602 いろは A 700 7000 -6298 ーーー 標準モジュールに Function aaa(a, b, c, d) Select Case a Case "あいう" Select Case b Case "A" aaa = c - d Case "B" aaa = c + d Case Else aaa = Err End Select '--- Case "いろは" Select Case b Case "A" aaa = (c - d) + 2 Case "B" aaa = (c + d) + 2 Case Else aaa = Err End Select '--"あいう" "いろは" 以外 Case Else aaa = Err End Select End Function

ojimaty2003
質問者

お礼

回答ありがとうございます。   VBAですね~ VBAは勉強しようと思っていますが、まだまだ入り口なので今後の課題ですね。 時間のある時にトライしてみます。

  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.2

No1は4行目の式を出してしまいました。行の4は1にしてください。

関連するQ&A

  • Excelの計算式で困っています。

    お世話になります。 まず、セル A1 B1  C1 D1(下方に連続)が有ります。 A1には(D1・D2・N・J・Dr)の5種類の文字列が限定で入り、B1には一定範囲の文字列が入ります。 C1には数字が入り、D1にD1・D2・N・J・Drの4種類の文字列に対して、対応する値をC1とかけ算した結果を表示したいのです。 それだけなら、IF関数で出来るのですが、セルA1~下の位置に文字列"D1・D2・N"の3種類がB1との3カ所以上有った場合、掛け率が違うように計算したいのです。 ”D1&○○○(○は同じ文字と考えてください)”や”D2&○○○(○は同じ文字と考えてください)”や”N&○○○(○は同じ文字と考えてください)”が3つ以上有った場合、セルXの数値を掛ける。そうでない場合は、D1やD2やNに対応したそれぞれの掛け率(別セル・絶対番地)を掛けるように。また、J・Drは単純に掛け率のセルと掛けるという次の計算式を作ってみました。 IF($A1="J",$C1*$BB$4, IF($A1="Dr",$C11*$BB$5, IF($A1="D1",$C11*$BB$1, IF($A1="D2",IF((SUMIF($AU$11:$AU$110,$B1,$BP$11:$BP$110)>=3),$C1*$BB$6, IF($A1="N",IF((SUMIF($AU$11:$AU$110,$B1,$BP$11:$BP$110)>=3),$C1*$BB$6, $P11*$BB$3))))))) ※SUMIFの検索範囲はセルA1&セルB1を表示させて、いくつ出たかを表示させる別番地になります。 BB1~BB6は掛け率を表しています。(後で変更が合ったときに式を全部変えなくても済むように) それで問題点は、セルA1の位置に文字列”D1"や"D2”を入れると、正しく計算できるのですが、セルA1の位置に文字列”N"や"J""Dr"を入れると、”FLASE”が表示され、正しい答えが表示されません。 それと、IF関数に対してカッコの数が多いように思うのですが、この式を入れると、削っても勝手にExcelの方で、足されてしまいます。 また、BB1~BB3及びBB6は%表示、BB4~BB5は整数というのも何か関係が有るのでしょうか? ------------------------------ |  A      |    B      |    C    |   D         | ------------------------------ |  D1      |   ○○○    | 10000    |      2000     | ------------------------------ |  D2     |    ○○●   | 20000     |     3000     | ------------------------------ |  N      |   ○○○   | 15000     |      1750     | ------------------------------ |  D2     |   ○○○   | 12000     |      1800     | ------------------------------ |  J      |   ○○●   |     1     |  300     | ------------------------------ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 上記の内容で、B列の"○○○"と”D1”または”D2”または”N”の組み合わせが3カ所以上有った場合だけBB6、それ以外は、それぞれの”D1”なら”D1”に対応する掛け率を表示させたいのです。 解りにくい説明で申し訳ないのですが、何かヒントだけでも御願いできればと思います。 よろしくお願いします。

  • エクセルの関数でand条件とor条件の組み合わせ

    エクセルで関数を使ってデータをまとめています。 セルA1が「A」で、セルB1が「イ」またはセルC1が「ロ」またはセルD1「ハ」のとき、「真」にするというようば場合どうしたらよいでしょう。 セルA1が「A」とうのは絶対で、それが「A」でない場合はみな「偽」にしたいです。 わかりずらい質問で済みませんが、よろしくお願いします。

  • IF関数でしたい事と、似たような計算

    エクセル2002です。 表の中に   A     B   C  D 1  1~10  A 2 11~20  B 3 21~30  C 4 31~40  D    : と入力されています。 表示させたい内容は ★「C1セルには数字を入れます。その数字が8ならば、8は1~10の中の数字なので、D1のセルにAと表示される。15ならばBと入力したいです。 使う関数は、IF関数‥‥と迷ったのですが、1~20、21~30‥‥199~200まであるので、IF関数が使えません。 関数では、このような可能でしょうか? 可能であれば教えてください。 不可能であり、他の方法があるなら、教えてください。 お願いします。

  • エクセルの関数

    数種類の関数を組み合わせて作ったのですが、ANDでもORでも答えが同じになってしまいます。 どこに間違いがあるのか、教えて頂けると助かります。 =IF(ISERROR(AND(FIND("A",A5,1),FIND("B",A5,1)=FALSE)),"偽","真") =IF(ISERROR(OR(FIND("A",A5,1),FIND("B",A5,1)=FALSE)),"偽","真") 上記式はAND・OR以外はすべて同じのつもりです。 AND関数の場合の答えは、期待通りです。 OR関数の答えとして、A5のセルに『A又Bが含まれている』にも拘わらず、『偽』と表示されます。 (ORのそれ以外の答えは期待通りです。) OR関数で、『A5のセルに、A又はBがひと文字でも含まれている場合』を、『真』とするにはどうすればよいでしょうか? 宜しくお願いいたします。

  • エクセル表計算について質問です。

    エクセル表計算について質問です。 添付のエクセル表があります。 2行目に注文数を入力すると各々の単価を掛けて、4行目にABCD各々の合計を算出します。 総合計を表示するときに、 BとCに注文がなければ(つまりAまたはDに注文がある場合) 【あ方式】としているB7セルへオートサムでB4:D4の値を表示し(ABCDの合計セルには注文数がなければ何も表示しないようにif関数がいれてあります。画像では0が表示されてしまっていますが、実際はCに注文がない場合には0ではなく、空白を表示するようにしています) BとCのいずれかに注文があれば 【い方式】としているD7セルへオートサムでB4:D4の値を表示するようにするにはどうしたらいいでしょうか。 ある場合はB7セルへ、ある場合はD7へ総合計の値を表示するにはB7、D7へどういう関数を入れればいいですか、という質問です。

  • エクセル オートシェイプ

    こんにちは。 自分なりに調べてみたのですが、わからなかったので教えてください。 A1セルにIF関数(因みに、=IF(AND(B1="商品",B2="新"),B3,"")で、B3セルには数字が入ります。)を入れ、 挿入した図形に=A1とすると、真の場合は指定した数字(B3と同じ)が入るのですが、 偽の場合は、空白ではな「0」が表示されてしまいます。 偽の場合に「0」ではなく、空白にするにはどのようにすれば良いのでしょうか。 よろしくお願いいたします。

  • エクセルでの関数の書き方

    セルA1からF1があります。 A1がC1かD1で同じでかつ B1がC1かD1で同じ場合に、 D1の値をF1にセットしたいのですが、 どのように書けばよろしいでしょうか? EX. A1が1でB1が2の場合は C1がD1が1,2または2,1の場合のみ E1の値をF1にセットします。 COBOLで書くとこんな感じになると思います IF (A1=C1 OR A1=D1) AND (B1=C1 OR B1=D1) THEN MOVE D1 TO F1 END-IF. IF関数かAND関数を使用するような気がしますが、 思いつきません。 よろしくお願いいたします。 エクセル2000です。

  • エクセルのIF関数で、真の場合OK!で偽の場合指定のセルの値が出るよう

    エクセルのIF関数で、真の場合OK!で偽の場合指定のセルの値が出るようにしたいのですが、可能でしょうか? A  B C D E F 10 8 1 0 1 1 10 8 2 0 0 OK! EはA-(B+C+D)で、FはEが0の場合OK!、偽の場合Eの値になる様にしたいです。 わかりにくいかとも思いますが、よろしくお願い致します。

  • 空白セルのとき0表示を消す方法(エクセル2003)

    例えば、      A     B     C     D・・・・・・ 1    10    20    0     30 2                   0 ・ ・ D1に、=A1+B1+C1 D2に、=A2+B2+C2の計算式が入っている時 A2,B2、C2が空白セルのとき、D2に0を表示したくない(空白セルにしたい)です。 過去の質問より、IF関数を使えばよいとわかったのですが、いまいちよくわからないため質問させて頂きました。 よろしくお願いします。

  • エクセル 計算式

    エクセルの関数についての質問です。 A1のセルにおいて、計算式を作成しました。その計算結果がマイナスの場合にA1のセルは0と表示させ、更に、B1セルではA1のセルの計算結果を計算式に入れているため、A1がマイナスであった場合は、B1での計算式中のA1の値を0として計算させたいのですが、どうやればよいのか教えて下さい。 IF関数ですか?色々やってみたのですが、うまく出来ません。 よろしくお願い致します。

専門家に質問してみよう