- ベストアンサー
Excelで4つの条件で計算式を変える方法とは?
- 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関数を使用してもうまく表示されません。どのように関数を書けば正しく表示されるのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
=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のいろはを入れました
その他の回答 (4)
- SI299792
- ベストアンサー率47% (772/1616)
まず、整理をします。 あいうの時 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を使っても長くなるので、やめた方がいいです。
お礼
回答ありがとうございます。 返事が遅れてしまって申し訳ございませんでした。
- kon555
- ベストアンサー率51% (1842/3559)
既に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つ分の入れ子構造ができました。あとはこれを繰り返していけば、延々と入れ子を重ねていく事が出来ます。 ただ入れ子になった条件式は中々理解しにくいですので、あんまり複雑なものを作るのはおすすめしません。ほどほどでやめておきましょう。
お礼
返事が遅くなってしまい申し訳ございません。 回答ありがとうございます。 考え方までご教示いただきありがとうございます。 一気に作ろうとするとこんがらがるので、細かく考えて後でつなげてく方式がわかりやすいですね!
- imogasi
- ベストアンサー率27% (4737/17069)
・小生は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
お礼
回答ありがとうございます。 VBAですね~ VBAは勉強しようと思っていますが、まだまだ入り口なので今後の課題ですね。 時間のある時にトライしてみます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
No1は4行目の式を出してしまいました。行の4は1にしてください。
お礼
早速の回答ありがとうございます。 やってみました! ちゃんと表示されました! ありがとうございます。 書いてもらって見れば、なるほど~って思うんですが、いざ自分でやるとドツボにはまります(笑)