- ベストアンサー
エクセル IF関数について
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
開始日,終了日,進捗の3つの数字が揃っていない場合は未記入。 そうでないとき。 進捗が0%の時。 本日<開始日なら 未着手 そうでないなら 着手遅 (そうでないとは開始日<=本日のことである) そうでないなら 進捗が100%未満の時。 終了日<=本日なら 完了遅延 そうでないなら 着手中 そうでないなら(とは進捗が100%以上の事である) 完了 =IF(COUNT(B2:D2)<3,"",IF(D2=0,IF(TODAY()<B2,"未着手","着手遅"),IF(D2<100,IF(C2<=TODAY(),"完了遅","着手中"),"完了"))) #別の方法 >未着手開始日>本日 かつ 進捗=0% >着手遅開始日<本日 かつ 進捗=0% (開始日=本日の条件抜け) >着手中進捗=1%以上 (説明に抜け多数) >完了遅終了日<本日 かつ 進捗=1%以上 (本日=終了の条件抜け,100%未満の条件抜け) >完了進捗100% を上から順に =IF(AND(B2>TODAY(),D2=0),"未着手","") &IF(AND(B2<=TODAY(),D2=0),"着手遅","") &IF(AND(C2>TODAY(),0<D2,D2<100),"着手中","") &IF(AND(C2<=TODAY(),0<D2,D2<100),"完了遅","") &IF(D2=100,"完了","") 進捗100% のように,IF(IF(IF(… と重ねるのではなく,条件ごとに連結していってもできます。そして考えた条件に間違いがあると,間違った答えが表示されます。変な結果が出たときは,「おかしい」じゃなく必ず考えていた条件分けに間違いがあるので,よく見直します。
その他の回答 (5)
- web2525
- ベストアンサー率42% (1219/2850)
考え方: 状態とステータスの組み合わせを考えてみましょう 添付の画像の表1が対応表です 開始前は無条件で:未着手 進展率100は無条件で:完了 進展率0は:着手遅れ 進展率 0より大きく100より小さい場合は状況により:着手中または完了遅れ 状態を数値化したものが表2になります 状態を表2の数値になるように計算式を立てます (終了日<TODAY()):期間中の判定 (進展率>0) :着手中の判定 (進展率=100) :完了の判定 (TODAY()>=開始日):未着手の判定 =(((終了日<TODAY())+1)*(進展率>0)*(進展率<>100)+(進展率=100)*3+1)*(TODAY()>=開始日) 式説明: ((終了日<TODAY())+1):期間中であれば1、終了後であれば2になります (進展率>0) :着手していれば1になります着手していない場合は0になります ((終了日<TODAY())+1)*(進展率>0) ここまでの計算で期間中の進展状態を0,1,2の数値化が完了 完了判定のため (進展率<>100):完了していれば0、着手中であれば1 を掛け (進展率=100)*3:完了時には+3 と補数+1を行い状態1,2,3,4を求めています (TODAY()>=開始日):開始前であれば0、開始後であれば1 今までの計算結果に掛けることで未着手の判定をしています ここまでの計算式で状態が0,1,2,3,4の判定が完了 あとはCHOOSE、LOOKUP、INDEX関数などで判定結果から表示項目を選択して表示を行うことが可能です 例: =CHOOSE((((終了日<TODAY())+1)*(進展率>0)*(進展率<>100)+(進展率=100)*3+1)*(TODAY()>=開始日)+1,"未着手","着手遅れ","着手中","完了遅れ","完了") =INDEX({"未着手","着手遅れ","着手中","完了遅れ","完了"},0,(((終了日<TODAY())+1)*(進展率>0)*(進展率<>100)+(進展率=100)*3+1)*(TODAY()>=開始日)+1)
お礼
web2525さん ご回答ありがとうございます。 条件を表に整理してみると解りやすいですね。 何をやりたいのか私自信はっきりさせないと、、、 判定結果から表示項目を選択させることは 初めてですが大変参考になりました。
- mshr1962
- ベストアンサー率39% (7417/18945)
No.3です。IF文を使わない方法で F4=CHOOSE(MIN(LOOKUP(E4,{0,1,100},{1,4,7})+(C4<$F$2)+(D4<$F$2),7),"未着手","着手遅れ","着手遅れ","着手中","着手中","完了遅れ","完了")
お礼
mshr1962さん ご回答ありがとうございます。 CHOOSE関数があるんですね 使えそうです。 参考にさせていただきます。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 単純にIF関数のネストで出来ると思います。 まず、条件を整理して (1)進捗100% ←これは無条件に「完了」ですね。 (2)開始日>本日 かつ 進捗=0% ←これは開始日がまだ来ていないわけですから、進捗率に関係なく、「未着手」になるはずです。 あとは上記の条件以外をIF関数でネストしてみてはどうでしょうか? ↓の画像でE4セルに =IF(COUNTBLANK(B4:D4),"",IF(D4=100,"完了",IF(B4>$E$2,"未着手",IF(AND(B4<$E$2,D4=0),"着手遅れ",IF(AND(C4<$E$2,D4<>100),"完了遅れ","着手中"))))) という数式を入れオートフィルで下へコピーしています。 これで何とか希望に近い形にならないでしょうか? 以上、参考になれば良いのですが 外していたらごめんなさいね。m(__)m
お礼
tom04さん ご回答ありがとうございます。 開始日>本日 かつ 進捗=0% ←これは開始日がまだ来ていないわけですから、進捗率に関係なく、「未着手」になるはずです> 進捗入力があったら”着手中”~”完了”にしたかった。私の説明不足でした。 画像の説明で解りやすく、COUNTBLANKの使い方も参考になりました。
- mshr1962
- ベストアンサー率39% (7417/18945)
上記の例がB2:F8の範囲だとしてIF文だけだと F4=IF($E4=100,"完了",IF($E4=0,IF($C4<$F$2,"着手遅れ","未着手"),IF($D4<$F$2,"完了遅れ","着手中")))
- ODEX
- ベストアンサー率58% (7/12)
Aのステータス欄が 「G4」だと仮定すると以下の数式でいける気がします。 =IF(F4=100,"完了",IF(AND(NOT(F4=100),D4<=$G$2,E4>=$G$2),"着手中",IF(AND($G$2>=D4,F4=0),"着手遅れ",IF(AND($G$2>=D4,NOT(F4=100)),"完了遅れ","未着手")))) ちょっと自信がないです。
お礼
ODEXさん ご回答ありがとうございます。 開始日の前に着手したら(進捗があったら)”着手中”にしたかったのですが、 未着手になってしまいます。私の説明不足でした。 組み合わせ、参考になりました!!
お礼
Keithinさん ご回答ありがとうございます。 開始日、終了日が入力されていないとステータス未表示←条件付き書式で何かできそう、 開始日と終了日が本日と同じで”**遅れ”になるが =を抜くことで”着手中”になる 警告を発するのでこれはこれで良い。 条件ごとに連結して、、、>なるほど。大変参考になりました。