- ベストアンサー
エクセルでセルの条件式が長すぎてエラー発生します
ある列のセルに以下の数式を入力しています。これだけだと問題ないのですが、さらにIF式を追加しようとするとエラーが表示されます。調べたところネストが上限のようです。VBAで同じような動作をさせたい場合、どのようになるのでしょうか?どなたか詳しい方助けてください。ちなみに日付を比較して、○や×を表示させるための式です。 =IF(RC[-2]>=R1C20,"",IF(AND(RC[-1]="",R1C20-RC[-2]<7),"△",IF(AND(RC[-1]="",R1C20-RC[-2]>7),"×",IF(RC[-1]=RC[-2],"○",IF(RC[-2]>RC[-1],"◎",IF(RC[-1]-RC[-2]<7,"△",IF(AND(RC[-2]="",RC[-1]<>""),"◎",IF(RC[-1]-RC[-2]>6,"×",""))))))))
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3です。補足ありがとうございます。 何日も経ってしまっていて恐縮ですが・・・ 1つの式でやろうとするなら ◎、○、△、×、空白になる条件を全部洗い出して IF(OR(条件,条件,条件),"◎",IF(OR(条件,条件,条件),"○",IF(OR(条件,条件,条件),"△",IF(OR(条件,条件,条件),"×","")))) という形に落とし込んでいけばいいです。 ただ、式を分けて対応できているならそのままの方がいいかと思います。 細かく条件分けすればするほど式が冗長になり、 他の人が見て判り辛い、修正がし辛いということになりますから。
その他の回答 (3)
- don9don9
- ベストアンサー率47% (299/624)
式の結果が◎○△×空白の5つしかないので、 きちんと条件を整理すればネストできなくはならないはずです。 No.2の方も言われているように、もう少し具体的に条件を 書いていただかないと、式だけで内容を理解するのは難しいです。 ・RC[-2]に入っている日付は何の日付か? ・RC[-1]に入っている日付は何の日付か? ・R1C20に入っている日付は何の日付か? ・上記3つの日付でブランクが有り得るのはどれか? ・上記3つの日付がどういうときに◎○△×空白にしたいのか? (日付がブランクである場合も含めて) このあたりを補足いただけませんか。 ここからは私の推測ですが、 スケジュール表の一部か何かで R1C20は今日の日付 RC[-2]は完了予定日 RC[-1]は実際の完了日 で、 完了予定日より前に完了している→◎ 完了予定日に完了している→○ 未完了で完了予定日を過ぎたが、まだ1週間たっていない→△ 完了はしているが完了予定日を過ぎた、但し1週間以内→△ 未完了で完了予定日を1週間以上過ぎた→× 完了はしているが完了予定日を1週間以上過ぎた→× 完了予定日がまだ→空白 みたいなことをやりたいのではないですか?
補足
ズバリおっしゃる通りです。びっくりしました。言われるとおりそのままで、完了予定日と実際の完了日はブランクの場合があります。今のところ3列使い、式を3つに分けて対応していますが、よりシンプルなやり方を教えて頂けると嬉しいです。宜しくお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
>VBAで同じような動作をさせたい場合、どのようになるのでしょうか CASE文などが使えて、分けてかけたりできるので状況は変わります。 行継続文字も使えるので関数のようなことは無い。 ネストの深さの制約もそんなに少なくは無い。 VBAなら、ロジックとして、表引きを考える。IFをネストするのは考え方が一本調子で初心者に多いように過去の回答経験から思う。 この質問式も、IFを使わず何か検索関数でも使えないかという疑念は私の中では晴れていない。ただ式だけからしたい内容は割り出せないので、断言は出来ない。 ーー 余分なことだが、なぜセルの指定にR1C1形式を使うのか。実務では使わなかったし、このコーナーの回答でこれを使った例はない。式が長くなるのではないですか。 ーー 関数式を無理すれば、2列(個以上)に分けられる場合もあるように思う。中間結果を出して、それを次で使えばよい。 下記例 ーー >VBAで同じような動作をさせたい場合、どのようになるのでしょうか シートの実例も挙げるのが当たり前では。 そして条件を判りやすく文章で表現すべきだ。 長い式の解読まで回答者にやらせないでください。ましてR1C1形式は読みにくいのだ。 === 無理に条件を分けた例(すべての場合については可能かどうか判らないが) A列13越える、B列24越える、C列37越えるをTRUEとして A-E列第2行から 11 21 31 FALSE FALSE 12 22 32 FALSE FALSE 13 23 33 FALSE FALSE 14 24 34 FALSE FALSE 15 25 35 TRUE FALSE 16 26 36 TRUE FALSE 17 27 37 TRUE FALSE 18 28 38 TRUE TRUE 19 29 39 TRUE TRUE D2は=(AND(A2>13,B2>24)) 下方向に式を複写 E2に=AND(E2,C2>37) 下方向に式を複写
お礼
丁寧な回答有り難うございます。二列に分けることで対応できました。
- Cupper
- ベストアンサー率32% (2123/6444)
1)二つに分ける 2)条件を見直して短い数式にする 3)別の方法をとる
お礼
回答有り難うございます。二つに分けることで解決できました。
お礼
回答有り難うございます。まだ、一つの式で試していませんが、おっしゃられるような式でやってみます。式を分けたのは良いのですが、動きが非常に重くなりましたので、一つの式で少しでも負荷が減るようであればやる価値はあると考えています。