- ベストアンサー
エクセルの関数について(IF,AND関数)
エクセルでIF,ANDを用いた関数計算の数式を作っているのですが、うまく出来ません。 どなたか詳しい方、教えて下さい。 たとえばこんな感じです。 ※条件は2個 ●第1条件~東京、大阪、北海道(3パターン) ●第2条件~数値の大小(3パターン) この2個の条件を満たす値、全部で9種類の計算パターンを実行できる数式を作ろうと思っています。 あともう1条件(IF文)入れたいのですが、これ以上入れると計算しません。 =IF(AND(B22>5000,B5="東京"),111,IF(AND(B22>=2000,B5="東京"),ROUND(300*B22^2/1000,4),IF(AND(B22<2000,B5="東京"),222,IF(AND(B22>5000,B5="大阪"),333,IF(AND(B22>=2000,B5="大阪"),ROUND(300*B22^2/1000,4),IF(AND(B22<2000,B5="大阪"),444,IF(AND(B22>5000,B5="北海道"),555,666)))))))
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
IFのネストは7つまでです。 これを回避するには最初に一定の条件で分けてから、次の条件で分けるようにします。 まず「東京」かどうか、又は「>5000」で分けるなど。 =IF(B5="東京",IF(B22>5000,111,IF(B22>=2000,ROUND(300*B22^2/1000,4),222)),IF(B5="大阪",IF(B22>5000,333,IF(B22>=2000,ROUND(300*B22^2/1000,4),444)),IF(B5="北海道",IF(B22>5000,555,IF(B22>=2000,ROUND(300*B22^2/1000,4),666)),""))) 条件2が2000以上5000以下の場合は、条件1に影響しないなら、そこで分岐させた方がまだ解りやすいかも。 それよりも別途対応表を作り、VLOOKUP等を使用した方が更に解り易いけど。
その他の回答 (9)
- sige1701
- ベストアンサー率28% (74/260)
質問の主旨を誤解していたようです。 >全部で9種類の計算パターンを実行できる数式を作 >ろうと思っています。 =IF(B5="東京",IF(B22>5000,111,IF(B22>=2000,ROUND(300*B22^2/1000,4),222)),IF(B5="大阪",IF(B22>5000,333,IF(B22>=2000,ROUND(300*B22^2/1000,4),444)),IF(B5="北海道 ",IF(B22>5000,555,IF(B22>=2000,ROUND(300*B22^2/1000,4),666)),"その他"))) または =IF(AND(B22>5000,B5="東京"),111,0) +IF(AND(B22>=2000,B5="東京"),ROUND(300*B22^2/1000,4),0) +IF(AND(B22<2000,B5="東京"),222,0) +IF(AND(B22>5000,B5="大阪"),333,0) +IF(AND(B22>=2000,B5="大阪"),ROUND(300*B22^2/1000,4),0) +IF(AND(B22<2000,B5="大阪"),444,0) +IF(AND(B22>5000,B5="北海道"),555,0) +IF(AND(B22>=2000,B5="北海道"),ROUND(300*B22^2/1000,4),0) +IF(AND(B22<2000,B5="北海道"),666,0)
お礼
早速の回答、ありがとうございました。 参考になりました。
- imogasi
- ベストアンサー率27% (4737/17069)
難しい問題ですね。というか、エクセル関数で処理するに不適当なパターンです。VBAのように記述の行数に制約の無いプログラムで処理するのが、ふさわしい。 ーー もともと関数はセルの値から、セルの値を求めるものです。この問題も大筋そうなのだが、5000-2000だけ式の「型」で指定されている。エクセルは、関数が文字列でわかっても、その式の計算はできない、と思うので、難しいのです。 ーー だから一般的な回答はできず、この質問のたまたまの、都合のいい、条件に縋って、式を簡略化するよりほか無い。 もうひとつ、2000の等号の問題がある。 ーーー 参考までに上げると、下記の表で表(の値)を引くには A1:E5のデータ(第1行目は参考までに上げたもの) -5000 5000-2000 2000 1999-0 (第1行目) 10000 5000 2000 2000 (第2行目、区分け 東京 222 111 111 333 大阪 555 444 444 666 北海道 888 777 777 999 大阪 2000 444 (第9行A8:C8) の、大阪と2000を指定して、444を引くには、 C9に =INDEX($B$3:$E$5,MATCH($A$9,$A$3:$A$5,0),MATCH($B$9,$B$2:$E$2,-1)) とする。 --- それで (1)式を指定するところの、北海道以外の2000から5000をIF文での中で分離、して(= 北海道でなく2000から5000) 該当は式ROUND(300*B22^2/1000,4)を指定。 (2)それ以外を上記説明のINDEX-MATCHで値を引く。 ーーーー 少しは見通しが良くなり、これ以上の多様性にも対処できるでしょう。 上記の、表引きは、複雑なので、式に凡ミスがあればお許しください。
お礼
早速の回答、ありがとうございました。 VBAとはマクロのことでしょうか? INDEX-MATCHについても理解しきれていないのでもう少し勉強します。
- poohron
- ベストアンサー率59% (574/971)
No.7です。 表示結果の表をちょっと書き間違えました(;^_^A >5000 >=2000 <2000 東 京 333 222 111 大 阪 666 555 444 北海道 999 888 777 でした…。
お礼
早速の回答ありがとうございました。
- poohron
- ベストアンサー率59% (574/971)
ANDは用いていない回答です。 =(IF(B5="東京",0,IF(B5="大阪",1,IF(B5="北海道",2,-1)))*3 +IF(B22>5000,3,IF(B22>=2000,2,IF(B22>=0,1,0))))*111 ※ただし、ご質問に記述された関数とは表示が以下のとおり若干変わります。 また、東京・大阪・北海道以外の地名の場合は0または負の数字が表示されます。 >5000 >=2000 <2000 東 京 111 222 333 大 阪 444 555 666 北海道 777 888 999 AND,IFどころか他の関数も使わずに記述することも可能です。 =(((B5="東京")+(B5="大阪")*2+(B5="北海道")*3-1)*3 +(B22>5000)+(B22>=2000)+(B22>=0))*111
お礼
早速の回答ありがとうございました。 参考になりました。
- redowl
- ベストアンサー率43% (2140/4926)
北海道の 残り部分が ???ですが IF関数 使わずで..... =(B5="東京")*(B22>5000)*111+(B5="東京")*(B22<2000)*222 +(B5="大阪")*(B22>5000)*333+(B5="大阪")*(B22<2000)*444 +(B5="北海道")*(B22>5000)*555+(B5="北海道")*(B22<2000)*666 +(B22<=5000)*(B22>=2000)*ROUND(300*B22^2/1000,4)
お礼
早速の回答、ありがとうございました。 このような作成方法もあるのですね。 ちなみにこの中の*って掛け算の意味なのでしょうか?? もうちょっと勉強してみます。
- sige1701
- ベストアンサー率28% (74/260)
数値を求めていますので =IF(AND(B22>5000,B5="東京"),111,0) +IF(AND(B22>=2000,B5="東京"),ROUND(300*B22^2/1000,4),0) +IF(AND(B22<2000,B5="東京"),222,0) +IF(AND(B22>5000,B5="大阪"),333,0) +IF(AND(B22>=2000,B5="大阪"),ROUND(300*B22^2/1000,4),0) +IF(AND(B22<2000,B5="大阪"),444,0) +IF(AND(B22>5000,B5="北海道"),555,0) +IF(AND(B5<>"東京",B5<>"大阪",B5<>"北海道"),666,0) でもいいかな
お礼
早速の回答、ありがとうございました。 勉強になりました。 計算を試してみた所、B22が5000以上になると2種類の計算値を足してしまう所がありました。(B22>5000、B22>=2000の両方の計算値の合計を足してしまう) 数式の考え方自体は学ばせて頂きました。
- sige1701
- ベストアンサー率28% (74/260)
=IF(B5="東京",IF(B22>5000,111,IF(B22>=2000,ROUND(300*B22^2/1000,4),222)),IF(B5="大阪",IF(B22>5000,333,IF(B22>=2000,ROUND(300*B22^2/1000,4),444)),IF(AND(B22>5000,B5="北海道"),555,666)))
お礼
早速の回答ありがとうございました。 助かりました。
- chukenkenkou
- ベストアンサー率43% (833/1926)
#2回答者です。 間違いを回答していまいました。 こちらでテストした時に転記ミスをしたようで、#1回答者さんの説明どおり、IF文のネストで引っ掛かってますね。 条件式の見直しをするしかないようです。
お礼
早速の回答、ありがとうございました。 まだまだ分からない所だらけですが、こんな便利なページがあるんですね。勉強になりました。
- chukenkenkou
- ベストアンサー率43% (833/1926)
関数のネストの条件に、引っ掛かってしまったようですね。 関数のいくつかを別の作業用のセルに入れて、計算するようにすれば大丈夫のようです。 例えば、C列を作業用に使えるとすれば、、、 C1セルに、「=AND(B22>5000,B5="東京")」 C2セルに、「=AND(B22>=2000,B5="東京")」 C3セルに、「=AND(B22<2000,B5="東京")」 C4セルに、「=AND(B22>5000,B5="大阪")」 C5セルに、「=AND(B22>=2000,B5="大阪")」 C6セルに、「=AND(B22<2000,B5="大阪")」 C7セルに、「=AND(B22>5000,B5="北海道")」 のように入力します。 質問で示されている式を、上記セルを参照するように変更します。 =IF(B5="×",-1,IF(C1,111,IF(C2,ROUND(300*B22^2/1000,4),IF(C3,222,IF(C4,333,IF(C5,ROUND(300*B22^2/1000,4),IF(C6,444,IF(C7,555,666)))))))) 作業用の列は、非表示にすれば、見た目は変わりませんね。
お礼
早速の回答ありがとうございました。
お礼
早速の回答、ありがとうございました。 IFのネストは7つまでなんですね。 勉強になりました。 エクセルの関数については、最近ちょっとづつ取り入れたりしていますが、まだまだ分からない所だらけです。VLOOKUPについてはまだよく分からないので勉強してみます。