【Excel】ガントチャート付きスケジュール表を作る(第2回:IF関数,IFS関数で条件分岐)

前回の記事では、スケジュール表の骨組みを作り、セルの書式設定で日付の表示形式も設定しました。

今回は、IF関数IFS関数を使って、状況に応じて表示内容を変える箇所の実装方法を解説します。

*完成品のExcelスケジュールテンプレートはこちらからダウンロードできます。

今日はIF関数やIFS関数を使うよ!
この関数は仕事で使えるシチュエーションも多くて便利だよ!

ガントチャートの「月」部分の表示を修正する

現状、すべてのセルに月が表示されていますが、必要な部分のみに表示するよう修正します。

55556666・・・となってしまっているのを修正する

月の数字を表示するセルは、以下の場合のみとします。

  • 一番左のセル
  • 各月の1日目のセル

一番左のセルは、既に月が表示されているので、修正は行いません。
左から2番目以降のセルは、無駄に月が表示されているので、IF関数DAY関数を使って、月の1日目の場合のみ表示されるようにします。

< M4セルの入力内容 >
=IF(DAY(M5)=1,M5,“”)

< 数式の意味 >
もしM5セルの日にちが1日だったらM5の値を表示。そうでなければ、空白

数式が入力できたら、一番右のセルまでペーストしてください。

こうすることで、日にちが1日の場合のみ月が表示されて、日にちが1日以外の場合は空白となります。

こんな感じになればOK

仕事の状況が自動で設定されるようにする

続いて、入力した期日や予定・実績に応じて、「状況」欄に適切な文言が表示されるようにします。

「状況」欄が自動設定されるようにする

STEP1 完了、実施中、未着手の3種類を判別する

まずは第一段階として、実績欄の入力状況によって、「完了」「実施中」「未着手」が表示されるようにしてみます。

< J7セルの入力内容 >
=IFS(I7<>””,“完了”,H7<>””,“実施中”,TRUE,“未着手”)

< 数式の意味 >
もしI7セルが空白でなければ完了と表示する
そうでない場合、H7セルが空白でなければ実施中と表示する
いずれも該当しない場合は、未着手と表示する

*説明が難しいので割愛しますが、「いずれも該当しない場合の条件は TRUE と書く」と覚えおいてください。

数式が入力できたら、一番下のセルまでペーストしてください。

実績欄の入力状況によって、自動的に状況欄が設定されているはずです。

こんな感じになればOK

実績欄は、開始日と終了日があるので、入力の状態は全部で4パターンあります。
上図を見ると、全てのパターンで正しく「状況」が設定されていることが確認できます。

ちなみに、今回使用したIFS関数は先述のIF関数の発展版関数だと思えばOKです。IF関数は、条件に合致するか合致しないかの2パターンを扱う関数ですが、IFS関数では、条件を必要なだけ増やして分岐することができますので、今回のようなケースに適しています。

ちなみに、IF関数でも、応用すれば今回のケースに対応できます。その場合の数式は以下のとおりです。

=IF(I7<>””,”完了”,IF(H7<>””,”実施中”,”未着手”))

IF関数の、そうでなければ の部分に、さらにIF関数を記述しています。
これでも特に問題はありませんが、慣れないと理解に時間がかかるかもしれません。

STEP2 「実施中」を更に細かく分ける

続いて、「実施中」の場合に、状況を更に細かく分けて表示するように修正していきます。用意するパターンは下表のとおりです。

条件表示する文言
期日を過ぎている実施中(期日超過)
終了予定日を過ぎている実施中(遅延)
それ以外実施中

この条件にそって、先ほどの数式の “実施中”IFS関数に書き換えます。

でも、そんなことをすると、数式が長くなってしまい、めちゃくちゃ読みにくくなることが想定されます。

その対策として、数式の見た目を整えましょう。数式は、途中で改行(ALTキー + ENTERキー)したり、半角スペースで位置を調整(インデント)しても動作に問題ありません。

こんな感じに整えておくと、多少見やすくなります

さて、本題にもどって、数式の修正を行います。
今回 “実施中” を書き換えた数式は以下の通りです。

< 書き換え後の入力内容 >
IFS($G$2>E7,“実施中(期日超過)”,$G$2>G7,“実施中(遅延)”,TRUE,“実施中”)

< 数式の意味 >
もし$G$2(本日)がE7(期日)より後だったら、実施中(期日超過)と表示。
そうでない場合、$G$2(本日)がG7(終了予定日)より後だったら、実施中(遅延)と表示。
いずれも該当しない場合実施中と表示。

数式が入力できたら、一番下のセルまでペーストしてください。

本日の値や、期日、終了予定日などを入力して、動作確認をしてみましょう。

ただしく条件分岐ができていることが確認できました

STEP3 「未着手」を更に細かく分ける

続いて、「未着手」の場合に、状況を更に細かく分けて表示するように修正していきます。用意するパターンは下表のとおりです。

条件表示する文言
期日を過ぎている未着手(期日超過)
終了予定日を過ぎている未着手(遅延)
開始予定日を過ぎている未着手(開始遅延)
それ以外未着手

今回は4パターンありますが、やることは先ほどと同じです。
この条件にそって、元の数式の “未着手”IFS関数に書き換えます。

< 書き換え後の入力内容 >
IFS($G$2>E7,“未着手(期日超過)”,$G$2>G7,“未着手(遅延)”,$G$2>F7,“未着手(開始遅延)”,TRUE,“未着手”)

< 数式の意味 >
もし$G$2(本日)がE7(期日)より後だったら、未着手(期日超過)と表示。
そうでない場合、$G$2(本日)がG7(終了予定日)より後だったら、未着手(遅延)と表示。
そうでない場合、$G$2(本日)がF7(開始予定日)より後だったら、未着手(開始遅延)と表示。
いずれも該当しない場合未着手と表示。

やってることは、”実施中”を書き換えた時とほとんど同じですね。
数式が入力できたら、一番下のセルまでペーストしてください。

本日の値や、期日、終了予定日などを入力して、動作確認をしてみましょう。

こんな感じになればOK

状況欄が自動的に細かく判定されて、便利だね!

STEP4 例外ケースに対応する

ここまでで、期待どおり動くようになっていると思いますが、例外の対処もしておきたいと思います。

先ほどまで作っていた数式は、期日予定(開始日/終了日)がちゃんと入力されていることを前提としています。それらが入力されていない場合のことは想定されていません

そこで、期日・予定が入力されていない場合はハイフンを表示するように修正します。

上図の青い部分は、先ほどまで作成していた数式そのままです。赤い部分が今回追記した部分になります。

< 書き換え後の入力内容 >
=IF(AND(E7<>””,F7<>””,G7<>””),さっきまでの数式,“-”)

< 数式の意味 >
もしE7(期日)が空白でない、かつ、F7(開始予定日)が空白でない、かつ、G7(終了予定日)が空白でない場合は、さっきまでの数式を実行。
そうでない場合は、-を表示

IF関数の条件部分に、AND関数を使っています。AND関数のカッコ内に、カンマで区切って複数の式を入力すれば、そのすべてを満たした場合のみIF関数の条件を満たしたと見なされます。

ちなみに、今回は使いませんが、似た関数に、OR関数があります。こちらは、OR関数のカッコ内に複数の式を入力し、そのいずれか1つ以上を満たした場合に条件を満たしたと見なされます。

数式が入力できたら、一番下のセルまでペーストしてください。

これで、期日・予定を入力していない場合は、ハイフンが表示されるようになりました。

次回予告

今回はIF関数IFS関数を使って、ガントチャートの月の部分と、状況欄に表示する値が他のセルの内容に応じて変わるようにしました。

次回の記事では、引き続きIF関数とIFS関数を使って、ガントチャートの中身を作成していきます。

コメント