• ベストアンサー

IFの入れ子(EXCEL関数)

excel:2007 os:vista    A     B       c         D        E   STS   開始日(予定)  終了日(予定)  開始日(実績)  終了日(実績) 1 未着手   2017/1/31    2017/2/1      空白       空白 2 着手    2017/1/31    2017/2/1     2017/1/31     空白 3 完了    2017/1/31    2017/2/1     2017/1/31      2017/2/1 上記のように、STSと開始/終了の予定実績日付と当日日付(2017/2/2)を確認して、 1から2の状態だったら”超過”と表示したいです。 ・開始予定日となっているが、開始実績日が未入力のレコード ・着手しているが、終了予定日を過ぎているレコード ifの入れ子しか方法はないのでしょうか? 1か2の単独ではできるのですか、両方の条件を考慮させた場合、できません。 わかる方、ご教示を。 また、IFの入れ子以外に方法は、あるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 回答No.2です。  申し訳御座いません、御質問の趣旨を勘違いしておりました。  "超過"と表示するのは、 ・B列の「開始日(予定)」欄に日付が入力されていて、尚且つ現在の日付がその開始予定日を過ぎている(開始予定日よりも後の日付になっている)にも関わらず、D列の「開始日(実績)」欄に「日付ないしは『中止』、『延期』等の何らかの値」が入力されていない場合 ・C列の「終了日(予定)」欄に日付が入力されていて、尚且つ現在の日付がその終了予定日を過ぎている(終了予定日よりも後の日付になっている)にも関わらず、E列の「終了日(実績)」欄に「日付ないしは『中止』、『延期』等の何らかの値」が入力されていない場合 の2パターンだけで、その他の場合には何も表示しない様にすると考えれば宜しいのでしょうか?  もしそれで宜しければ、"超過"と表示する列の2行目のセルに次の様な関数を入力してから、そのセルをコピーして同じ列の3行目以下に貼り付けて下さい。 =IF(OR(AND($B2>1,$B2<TODAY(),$D2=""),AND($C2>1,$C2<TODAY(),$E2="")),"超過","")  それとも上記の2パターンに加えて、 ・C列の「終了日(予定)」欄とE列の「終了日(実績)」欄の両方に日付が入力されていて「完了」はしているものの、現在の日付がその終了予定日と終了実績日のどちらの日よりも後の日付になっていて、尚且つE列の「終了日(実績)」欄に入力されている終了実績日がC列の「終了日(予定)」欄に入力されている終了予定日よりも後の日付になっている場合 (開始実績日が開始予定日よりも後の日付となっているだけの場合には"超過"とは表示しない) に関しても"超過"と表示した方が良いのでしょうか?  その場合は、、"超過"と表示する列の2行目のセルに次の様な関数を入力してから、そのセルをコピーして同じ列の3行目以下に貼り付けて下さい。 =IF(OR(AND($B2>1,$B2<TODAY(),$D2=""),AND($C2>1,$C2<TODAY(),OR($E2="",$C2<SUM($E2)))),"超過","")

noname#261093
質問者

補足

ありがとうございました。また、別な考慮パターンまで考えていただき、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.5

3状態しかなく 其の3状態が 1、2、3、 で、在る時 1OR2=NOT3 ですよね? 詰まり 開始されていて (C1:C3の何れかに日付が入っている) (又はsumproduct(C1:C3)>0) 終了予定日が過ぎているのに (B1<=today()) D 1:D3の全てが空白 または、 D 1:D3の総和が0 (sumproduct(C1:C3)=0) ならば超過 ですよね? なので、例としては =IF(   AND(    sumproduct(C1:C3)>0,    B1<=today(),    sumproduct(C1:C3)=0   ),   "超過",   "" ) で、良いかな?

全文を見る
すると、全ての回答が全文表示されます。
  • intin
  • ベストアンサー率33% (8/24)
回答No.4

もし、1、2の条件について、単独で出来ているのであれば、 次のような計算式ができているわけですよね? =if(【1の条件】,"超過","") =if(【2の条件】,"超過","") ここまで出来ていれば、 =if(or(【1の条件】,【2の条件】),"超過","") というようにor関数を使えば、計算式が組めるはずですよ。 >ifの入れ子しか方法はないのでしょうか? if関数の入れ子で書く代わりに、 例えば、 F1セル:=if(【1の条件】,"超過","") G1セル:=if(【2の条件】,"超過","") と入れて、 H1セルに、 =if(F1<>"",F1,G1) というような計算式を入れてもいいかもしれませんね。

参考URL:
https://www.excelspeedup.com/func_or/
全文を見る
すると、全ての回答が全文表示されます。
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>ifの入れ子しか方法はないのでしょうか? あなたが考えた数式を提示して添削を依頼すべきです。 あなたの考え方を推測するのは難しいことなので次のような数式を提示して他の考え方を問うことにすれば目的に合う回答が得られるでしょう。 入れ子の数式 =IF(D2<G$1,IF(F2="","超過",""),"")          ↓ 目的の数式  =IF(AND(D2<G$1,F2=""),"超過","") または    =IF((D2<G$1)*(F2=""),"超過","") >また、IFの入れ子以外に方法は、あるのでしょうか? IF関数の論理式を複数条件に対応できる場合は入れ子にしなくても条件分岐できます。 AND(D2<G$1,F2="")と(D2<G$1)*(F2="")は等価です。 OR(D2<G$1,F2="")と(D2<G$1)+(F2="")は等価です。 論理式の結果を数値化するとFALSEは0、TRUEは1となります。 また、論理演算以外で論理式を代用するときは結果が0のときFALSE、0以外のときTRUEと判断されます。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 どこに >”超過”と表示したい のかという事が御質問文には書かれていないので、取り敢えず仮の話としてF2以下に”超過”と表示させるものとして話を進める事に致します。  その場合、まずF2セルに次の様な関数を入力してからF2セルをコピーして、F3以下に貼り付けると良いと思います。 =IF(AND(COUNTIFS($B2:$C2,">1",$B2:$C2,"<9999/12/31")=2,OR($D2="",AND(SUM($D2)<=TODAY(),SUM($E2)<TODAY()))),"超過","")

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

Q、IFの入れ子以外の方法は? A、論理式を利用。 IFの入れ子を回避する一つの方法として、論理式を利用する手があります。 論理式:(条件式1)*(条件式2) ただし、EXCEL には、かかる論理式の積を表現する《AND関数》が用意されています。ですから、 =IF(AND(条件式1,条件式2),"XXX","XXX") と書くのが一般的かもです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel関数について

    Excel2010を使用しています。 以下の事をExcelで行いたいのですが、検索してもなかなかヒットせず、 解決策を探しています。良い関数はないでしょうか? A1(開始日)、B1(終了日)に期間を指定する(2014/2/1~2014/5/15) 開始日終了日は、日付まで記入する A3以降に指定された期間内の年月を表示する A3以降はMAX12か月分まで表示 (例) A1 : 2014/2/1 B1 : 2014/5/15 A3 : 2014/2 B3 : 2014/3 C3 : 2014/4 D3 : 2014/5 E3 : 空白 F3 : 空白 G3 : 空白 ・・・・ L3 : 空白

  • エクセル IF関数について

    エクセル IF関数について 画像のような表があり、進捗の列へ進捗率を入力することで ステータスの列へ”着手中”等の表示をさせたいです。 個々の式は解りますが、組み合わせ方がわかりません。 ご教授をお願いします。 条件 未着手 開始日>本日 かつ 進捗=0% 着手遅 開始日<本日 かつ 進捗=0% 着手中 進捗=1%以上 完了遅 終了日<本日 かつ 進捗=1%以上 完了 進捗100%

  • スケジュール管理 仕掛中の作業をexcel関数で表示する方法について

    仕事のスケジュール管理をexcelで行っています。 excel関数について教えてください。  A   B    C     D    E 1               2008/10/1 2008/10/2  2作業1 2008/10/1 2008/10/10 (1)    (2) 3    2008/9/29       (3)    (4) 補足: A2:作業名(作業1) B2:開始予定日(200//10/1) C2:終了予定日(2008/10/10) B3:開始実績日(2008/9/29) C3:終了実績日(未記入) D1、E1:実日(2008/10/1、2008/10/2) (1)(2)実日が開始予定日から終了予定日の範囲にある場合は□を表示。  (1)「=IF(D$1>=$B2,IF(D$1<=$C2,"□",""),"")」  (2)「=IF(E$1>=$B2,IF(E$1<=$C2,"□",""),"")」 (3)(4)実日が開始実績日~終了実績日の範囲にある場合は■を表示。  (3)「=IF(D$1>=$B3,IF(D$1<=$C3,"■",""),"")」  (4)「=IF(E$1>=$B3,IF(E$1<=$C3,"■",""),"")」 上記例の場合、開始予定日より前に作業1を開始しているため、「仕掛中」です。しかし、上記(3)(4)の関数では■が表示されません。 やりたいことは、 仕掛中の場合は■を表示したいのですが、関数の指定方法がわかりません。 是非とも解決策を教えていただきたく、御教授の程宜しくお願い致します。 尚、excel関数で実現したいという制約があります。

  • 関数を教えて下さい

    Microsoft Office Excel 97-2003 を使用しています。 (1) 期間の開始日から終了日までを求めたいのですが,開始日が含まれないため 1日少なく結果が出てしまいます。 式に +1 とすればよいのですが,きちんと式に組みこまれたような関数はないでしょうか。 (2) また,開始日や終了日が空白でも,日数が入ってしまい, 開始日や終了日が空白の場合は空白にしたいです。

  • EXCELのIF関数で

     こんにちは。教えて下さい  ある範囲(C4:L4とします)の中にある空白の数によって、一定の数を返すような数式を作りたいのです。空白の数が、0で2、1で3、2で4、3で5、4で6、5で8、6で11、7で15、8で20、9で30、10で0という具合で、規則性はありません。IF関数とCOUNTBLANK関数を使って、次のような入れ子構造の数式を作りました。  =IF(COUNTBLANK(C4:L4)=0,2,IF(COUNTBLANK(C4:L4)=1,3,IF(COUNTBLANK(C4:L4)=2,4,IF(COUNTBLANK(C4:L4)・・・中略・・・IF(COUNTBLANK(C4:L4)=9,30,0))))))))))  最後の閉じ括弧の数は正確ではありませんが(汗)、実際にはきちんと合わせました。  ところがエラーが出てしまうのです。入れ子の階層数に制限があるのでしょうか? それとも他に原因が?  そもそもこんな長い数式ではなく、もっとうまい方法があるような気もするのですが・・・。  よろしくお願いいたします。

  • エクセルのIF関数について

    =IF(L2="","EDATE(J2,K2)","EDATE(L2,K2)") という数式で L2が空白の場合、J2の日付からK2の月分だけ経過した日付を表示。 空白でない場合、L2の日付からK2の月分だけ経過した日付を表示したいのですが、 セルには直接『EDATE(J2,K2)』という数式が表示されてしまいます。 空白にしたら『EDATE(J2,K2)』、日付を入れたら『EDATE(L2,K2)』になるので一応IF関数は生きてると思うのですが、中で計算をしてくれていません。 解決方法をぜひご教授くださいませんか。

  • IF関数(空白の表示)について

    B3のセルに日付が入力されると、C3には「B3]+1日の日付が表示されるように数式を入力したいのですがうまくいきません。 「B3]が空白の場合はC3も空白の表示にしたいです。 IF関数の(空白の表示)がよく分からないのでわかるかた教えてください。

  • エクセル2010 IF関数について

    以下のような表を作成中です。 H6 =H7 H7 =E10 H8 =E10 H9 =E10 H11 =IF(AND(H$8>=$E11,H$8<=$F11),"1",IF(OR(H$8>=$F11,H$8<=$G11),"2","")) H11の条件付き書式は以下のようになっています。 H11 =H11="1" 緑に塗りつぶし H11 =H11="2" 赤に塗りつぶし H11の関数についてご教示お願いいたします。 E11に開始日、F11に終了日、G11に遅延の日付を入力するようになっています。 G11に日付が入っていなければE11とF11の日付を、 G11に日付が入っていればE11とF11、F11とG11の日付を 条件付き書式でそれぞれ塗りつぶしたいのですが、 今のH11のIF文だと遅延の日付が入らなくても赤く塗りつぶされてしまいます。 G11が空欄なら・・・と付け加えたいのですが、うまくいかずに困っています。 そもそものIF文にも自信がないのですが、 上記のようなことが出来るようにするには、 どういった関数にすればよいのかご教示願います。 よろしくお願いいたします。

  • EXCEL関数VLOOKUPとIFについて

    たびたび申し訳ありません シート1 セルA1(商品)  A2(値段)  A3(購入日) AAA       200円    2007年 BBB       300円 CCC       200円    2006年 シート2 セルA1(結果表示)   セルA2(商品入力) の様なデータがあるのですが シート2セルA1には以下のような関数を入れてます =IF(ISBLANK(A2),"",VLOOKUP(A2,Sheet1!A1:C3,3,FALSE)) もしシート2のセルA2に商品BBBを入れると 日付の部分が0と表示されてしまいます。 空白セルがあった場合に0ではなく何も表示されないようには どのような関数で書くのでしょうか? 又、別の件なのですがセルA1にセルA2の内容を表示するとき IF(A2="","",A2)と書いたのですがA1セルには ひし形のエラーマークが出ます。 内容は空白セルを参照していますと出てました こちらを消すにはどのようにすればよろしいのでしょうか? お願いいたします。

  • Excel関数について

    Excel関数について質問です。 以下の二つ (1) 下のように、セルA1から入力されてるものを、1、2、3・・と数字順に並び替える良い方法はありますでしょうか。 A-1 A-10 A-10A A-100 A-2 A-20 A-22.5 ・ ・ A-555 ・ ・ (2) 一行目と二行目に値の入ったセルと空白セルが混在しています。どちらも同じものに対する値の為、一行目にまとめようと、一行目の空白セルに二行目のセル(下)に値がある場合はその値を返し、空白の場合は空白のままにするというIF関数を使いましたがうまくいきませんでした。三行目と四行目、五行目と六行目・・とかなりあります。良い方法を教えていただけますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう