- ベストアンサー
論理関数、IFとANDを組み合わせた場合
いきなりですが・・・ =if(and(b11=0,b12+b13+b14+b15+b16=1),e7,if(and(b11=0,b12+b13+b14+b15+b16=2),e7*1/2,if(and(b11=0,b12+b13+b14+b15+b16=3),e7*1/3,if(and(b11=1,B12+b13+b14+b15+b16=1),e7*1/2,if(and(b11=1,B12+b13+b14+b15+b16=2),e7*1/4という具合で数式を入れていましたが、この流れで、30回くらい?繰り返し入力していたら、途中から急に貴方の関数は間違いです的な感じで数式が反映されなくなりました。 WORDみたいにある程度の入力したら、それ以上は無理という決まりがExcelにもあるのでしょうか? 何回も見直しましたが、私の入力ミスは見当りません。 誰か具体的な解答を教えていただけませんか? 因みに、ほとんどExcelに関しては素人です。 上記の数式?くらいなら反映されるのですが・・・。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>Excelにもあるのでしょうか こんなの具体的には一々知らないけれど、コンピュター関連での常識。 いまさら質問されることに驚く。 数の桁数(マシン語レヴェル)から始まって、諸所にすべて仕様上の制約があります。プログラムを作る言語上の制約、出来上がったソフト上の制約など。 どんなソフトでもあります。しつこいので解説書などには、書いてない場合が多いだけです。 WEBででも調べてみたら。例 Googleで「エクセル 関数 制限」で照会など。 エクセルでの一端は http://www.relief.jp/itnote/archives/000579.php 関数に設定できるネストレベル 7 http://asugi23.web.infoseek.co.jp/excel/soft33.htm の4 論理関数の併用とネストの制限 (2003まで) バージョンによって違う場合があるので面倒です(特に2007で変化したものがある)。 AND関数は30個までです。SUM関数も30個までです。(2003まで) IFのネスト数とSUMの引数の制約は該当頻度が多く有名です。 他に関数では、範囲指定出来る列が1列だけとか、ほとんどの関数に 制約があります。 ーー 質問の式は、常軌を逸しているぐらい長い。解説書など見て、異常に長いという感覚をもち、その場合何か他の方法が無いか調べるように すべきです。本件もそれですが。 =SUM()で置き換える部分もある(同列で連続したセルの加算は =SUM(B12:B16)とか。 ーー 一度関数の本を読むとか、スクールに行って、系統だって勉強する 必要があると思う。自己流でここまで来たのだと思うが。 さらに言えば、場合分けが自由なVBA(を使ってのユーザー関数)などを勉強されるのが良い。
その他の回答 (4)
- michi_001
- ベストアンサー率32% (21/65)
どうしてもIF関数で進めたい場合(無理にとはいいませんが) >=if(and(b11=0,b12+b13+b14+b15+b16=1),e7,if(and(b11=0,b12+b13+b14+b15+b16=2),e7*1/2,if(and(b11=0,b12+b13+b14+b15+b16=3),e7*1/3,if(and(b11=1,B12+b13+b14+b15+b16=1),e7*1/2,if(and(b11=1,B12+b13+b14+b15+b16=2),e7*1/4 =if(and(b11=0,b12+b13+b14+b15+b16=1),e7,"") &if(and(b11=0,b12+b13+b14+b15+b16=2),e7*1/2,"") &if(and(b11=0,b12+b13+b14+b15+b16=3),e7*1/3,"") &if(and(b11=1,B12+b13+b14+b15+b16=1),e7*1/2,"") &if(and(b11=1,B12+b13+b14+b15+b16=2),e7*1/4,"")… (見やすいようにあえて改行してます) のように、& で1個1個つなげていけば出来ないことは無いですし、ネストされていないのでいくつでもつなげられます。 まぁ、規則性を見つけて簡略化させる方が「スッキリ」しますが、後で何かしらの修正があったときに比較的悩まないでいけるのかな、こっちの方が…?
お礼
裏技的な指南ありがとう御座います。 前者の方々の簡単な数式を作れるよう計算しなおして、どうしても数式が短くできない時に利用させてもらいます。 ありがとうございました。
- cj_mover
- ベストアンサー率76% (292/381)
具体的な解答< には説明が不足していますが、見えている限りでは =e7/((b11+1)*sum(b12:b16)) とか? =e7/((2^b11)*sum(b12:b16)) とか? 仮にもっと複雑なんだとしても、 規則性のある範囲毎に、条件分岐すればいいのでは? 少数以下どれ位の精度を求めるか、によっても式の建て方は変わるので、 「演算誤差」を無視した場合の話ってことになります。
お礼
>sum(b12:b16) の使い方すら知りませんでした。 面倒省けそうでこういう回答助かります。 ありがとう御座いました。
- t-yamada_2
- ベストアンサー率40% (587/1460)
Excel2003だとネスト(分岐)は7回までのようです。 8回以上は以下参照して下さい。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1315105958
お礼
参考になりました。 ありがとうございます。
- maron--5
- ベストアンサー率36% (321/877)
◆ネスト(関数の引数の中で関数を使う)が最大7つです ◆それに制限されているとおもいます ★Excel2007ではもっと多くなっているようです ★式を見直すか、VLOOKUP関数などの換算表なども検討されてはいかがでしょうか
お礼
みなさんの回答で制限されていることがわかりました。 スッキリしました。先に進めます。ありがとう御座いました。
お礼
ご返信ありがとう御座います。 >他に関数では、範囲指定出来る列が1列だけとか、ほとんどの関数に 制約があります。 常識なんですね!?確かに自己流です。一昨日から使い始めました。 >一度関数の本を読むとか、スクールに行って、系統だって勉強する 必要があると思う。 時間があればそうしたいと思います。 今、時間が中々なく、目的を達成する為にその部分の理解がどうしても必要でしたので、ここを利用させていただきました。 わかりやすいお返事誠にありがとうございました。