関数でガントチャートをつくってみる
森田森田

ガントチャートの記事で「休日を抜きたい」というコメントを頂いたので、関数で実現したいと思います。

関数でもガントチャートはつくれる!

該当記事はこちらです。

Excelでガントチャートをつくる方法 | Excelを制する者は人生を制す ~No Excel No Life~

やりとりの中であったご質問はこちら。

①休日をいれてスケジュールひくにはどうすればいいでしょうか?
グラフでガントチャートをつくる場合は休日を抜くことは結構めんどくさいので向かいないですね(;^_^A
なぜなら、休日を表すセルを休日数分予め用意しないといけないので、可変性がなくなります。
どうしてもやりたい場合は、関数でガントチャート部分を表すって感じですかね。
今度時間ある時に別途記事にして投稿してみたいと思います(*^-^*)

そんなわけで実際に関数で実現したいと思います。

実際、ガントチャートは横棒グラフなので、代わりにセル上でグラフっぽい文字列を並べる感じですね。

関数での作り方

祝日用のシートを用意する

関数ガントチャート①

まず、最初に祝日用のシートを用意しましょう。

こちらは、Excelは祝日を自動で判断してくれませんので、個別に用意してあげる必要があります。

ちなみに、こういう追記していく可能性のあるデータは、「テーブルとして書式設定」でテーブル化しておくと、後程記述していく関数のメンテナンスが楽ちんになるのでおすすめです(*^-^*)

「テーブルとして書式設定」についてもっと詳しく知りたい人は、以下の関連記事を参照してください。

Excelの表はなるべくテーブル化しよう!テーブルのメリット6選 | Excelを制する者は人生を制す ~No Excel No Life~

入力箇所

関数ガントチャート②

入力箇所は今回は4か所です。

  • タスク
  • 開始日
  • 終了日
  • ガントチャートの起算日

タスク以外は日付ですから、"mm/dd"形式で入力します。

ちなみにガントチャートの起算日であるF1セルを入力すると、F2・F3セルはイコール、G列以降のセルは左隣の日付に"+1"で1日ずつ自動で加算されるよう数式を組んでいます。

条件付き書式

関数ガントチャート③

土日祝はグレーアウトするようF4セル以降のセルには条件付き書式を組んでいます。

条件付き書式はちょっと複雑ですが、「=OR(WEEKDAY(F$1)=1,WEEKDAY(F$1)=7,COUNTIF(祝日!$A$2:$A$12,F$1))」と記述しています。

要は、各列の1行目のセルが土曜か日曜になっているか、もしくは1行目のセル「祝日」のシート内にあるか、いずれかに該当するとグレーアウトするように条件設定しています。

この土日祝に条件付き書式を設定する方法についてもっと詳しく知りたい人は、以下の関連記事を参照してください。

IF関数とOR関数で複数条件(~または)を設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~

関数

IF関数・OR関数・WEEKDAY関数・AND関数

関数ガントチャート④

ここが今回のテクニックのメイン部分ですね。

今回は、IF関数を2つネストしています。

まず、1つ目のIF関数は先ほどの条件付き書式と同じで各列の1行目の値が土日祝に該当している場合は休日を除きたいのでブランクにさせます。

これは、土日祝のいずれかに該当すれば良いわけですから、OR関数で複数条件を判定できるようにしています。

中身の条件は、土日ならWEEKDAY関数で判定できますね。

ちなみにWEEKDAY関数は曜日を日→土の順番で各曜日に1~7の整数が割り振りされています。(起算曜日は変えることができます)

曜日を調べたいセルをWEEKDAY関数の引数に指定してあげれば、各曜日を示す番号が返りますので、条件式にするならば、F1セルであれば日曜なら「WEEKDAY(F$1)=1」、土曜なら「WEEKDAY(F$1)=7」とすれば良いわけです。

祝日はCOUNTIF関数を用いて、「祝日」シートの祝日を入力した範囲を指定し、検索値を土日を判定した時と同じセルにすれば良いです。

今回は、「祝日」シートはテーブル化しているため、範囲部分が「COUNTIF(テーブル1[祝日],F$1)」となっていますね。

そして、2つ目のIF関数で各列の1行目の値が「開始日」以上かつ「終了日」以下になっていれば"■"、それ以外はブランクにしています。

ここも、複数条件ですが、今度は「かつ」なので2つの条件に該当する必要があるため、AND関数で複数条件を判定できるようにしています。

AND関数の中の条件設定は、「以上」「以下」なのでそれぞれ「>=」「<=」という記号で設定していますね。 IF関数とAND関数・OR関数の組み合わせについてもっと詳しく知りたい人は、以下の関連記事を参照してください。 IF関数とOR関数で複数条件(~または)を設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~

IF関数とAND関数で複数条件(~かつ)を設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~

COUNTIF関数

関数ガントチャート⑤

最後に、先ほどのIF関数で判定した"■"をカウントして終了です。

こちらは、単純に各行の範囲からCOUNTIF関数で"■"を検索値にすれば良いですね。

COUNTIF関数についてもっと詳しく知りたい人は、以下の関連記事を参照してください。

COUNTIF関数で覚えておくと捗る検索テクニック | Excelを制する者は人生を制す ~No Excel No Life~

ちなみに、これ以外にもNETWORKDAY関数を使っても計算することができます。

こちら今後別記事でまとめていく予定です。

当サイトの関連記事

Excelでガントチャートをつくる方法 | Excelを制する者は人生を制す ~No Excel No Life~

Excelの表はなるべくテーブル化しよう!テーブルのメリット6選 | Excelを制する者は人生を制す ~No Excel No Life~

IF関数とOR関数で複数条件(~または)を設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~

IF関数とOR関数で複数条件(~または)を設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~

IF関数とAND関数で複数条件(~かつ)を設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~

COUNTIF関数で覚えておくと捗る検索テクニック | Excelを制する者は人生を制す ~No Excel No Life~

まとめ

発想を変えればガントチャートも関数で疑似的に表現することができますね。

しかも、関数の方がグラフよりも見た目で劣る分、柔軟性に富んでいますので、加工しがいがあります。

ちなみにもっと複雑に条件を組めば、一律"■"の記号であった部分を"←"、"→"などにも変更することができますので、本当に発想力次第ではいかようにでも表現できますね。

ご参考になれば幸いですm(__)m

サンプルファイル

サンプルファイル_関数ガントチャート
※サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります。
(上記リンクから登録フォームへ遷移します)

上記で作成したサンプルファイルです。
ダウンロードして確認してみてください♪