
エクセルで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)))))))
No.1ベストアンサー
- 回答日時:
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等を使用した方が更に解り易いけど。
早速の回答、ありがとうございました。
IFのネストは7つまでなんですね。
勉強になりました。
エクセルの関数については、最近ちょっとづつ取り入れたりしていますが、まだまだ分からない所だらけです。VLOOKUPについてはまだよく分からないので勉強してみます。
No.10
- 回答日時:
質問の主旨を誤解していたようです。
>全部で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)
No.9
- 回答日時:
難しい問題ですね。
というか、エクセル関数で処理するに不適当なパターンです。VBAのように記述の行数に制約の無いプログラムで処理するのが、ふさわしい。ーー
もともと関数はセルの値から、セルの値を求めるものです。この問題も大筋そうなのだが、5000-2000だけ式の「型」で指定されている。エクセルは、関数が文字列でわかっても、その式の計算はできない、と思うので、難しいのです。
ーー
だから一般的な回答はできず、この質問のたまたまの、都合のいい、条件に縋って、式を簡略化するよりほか無い。
もうひとつ、2000の等号の問題がある。
ーーー
参考までに上げると、下記の表で表(の値)を引くには
A1:E5のデータ(第1行目は参考までに上げたもの)
-50005000-200020001999-0(第1行目)
10000500020002000(第2行目、区分け
東京222111111333
大阪555444444666
北海道888777777999
大阪2000444(第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についても理解しきれていないのでもう少し勉強します。
No.7
- 回答日時:
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
No.6
- 回答日時:
北海道の 残り部分が ???ですが
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)
早速の回答、ありがとうございました。
このような作成方法もあるのですね。
ちなみにこの中の*って掛け算の意味なのでしょうか??
もうちょっと勉強してみます。
No.5
- 回答日時:
数値を求めていますので
=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の両方の計算値の合計を足してしまう)
数式の考え方自体は学ばせて頂きました。
No.2
- 回答日時:
関数のネストの条件に、引っ掛かってしまったようですね。
関数のいくつかを別の作業用のセルに入れて、計算するようにすれば大丈夫のようです。
例えば、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))))))))
作業用の列は、非表示にすれば、見た目は変わりませんね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表計算ソフトでの様式の呼称
-
vba テキストボックスとリフト...
-
エクセルのVBAで集計をしたい
-
【画像あり】【関数】指定した...
-
【マクロ】数式を入力したい。...
-
【マクロ】元データと同じお客...
-
【マクロ】実行時エラー '424':...
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
【マクロ】左のブックと右のブ...
-
【マクロ】【相談】Excelブック...
-
他のシートの検索
-
【マクロ】【配列】3つのシー...
-
エクセルのライセンスが分かり...
-
エクセルでフィルターした値を...
-
エクセルに写真が貼れない(フ...
-
エクセルシートの見出しの文字...
-
【マクロ】【画像あり】❶ブック...
-
セルにぴったし写真を挿入
-
エクセルのリストについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報