- マネジメント
ガントチャートの作り方 エクセル数式とMermaidのテンプレート
ガントチャートとは、縦にタスク、横に日付を並べ、各タスクの期間を横棒(バー)で表した工程表です。 エクセルでは「開始日と日数から終了日を出す数式」と「日付の列を塗る条件付き書式」の2つがあれば作れます。
この記事では、架空の「備品予約システム」の開発スケジュール(タスク10件)を題材に、貼り付けて使えるタブ区切りの表、依存関係つきの日付の数式、条件付き書式の式5種、同じ内容の Mermaid gantt コードをまとめました。数式はすべて表計算ソフトで計算し、その結果を載せています。
確認環境:数式と条件付き書式は LibreOffice Calc 24.2.7 で計算・描画して確かめました(Excel と共通の関数だけを使用)。Mermaid のコードは Mermaid 11.14.0(@mermaid-js/mermaid-cli 11.14.0 + Chromium)で描画して確かめました。
ガントチャートの作り方の早見表
列の並びは「A:No/B:タスク/C:担当/D:先行1/E:先行2/F:先行終了/G:開始日/H:日数/I:終了日/J:進捗率/K:予定進捗/L:状態/M列から右:日付」です。祝日は「設定」シートの A2:A20、基準日(今日)は「設定」シートの C2 に置きます。
| やりたいこと | 入力する場所 | 式 |
|---|---|---|
| 終了日を出す(土日祝を除く) | I2 | =IF(H2=0,G2,WORKDAY(G2,H2-1,設定!$A$2:$A$20)) |
| 先行タスクの終了日を拾う | F3 | =MAX(IFERROR(INDEX($I$1:I2,MATCH(D3,$A$1:A2,0)),0),IFERROR(INDEX($I$1:I2,MATCH(E3,$A$1:A2,0)),0)) |
| 開始日を先行の翌稼働日にする | G3 | =IF(H3=0,F3,WORKDAY(F3,1,設定!$A$2:$A$20)) |
| 稼働日数を数える | 任意のセル | =NETWORKDAYS(G2,I2,設定!$A$2:$A$20) |
| 予定進捗を出す | K2 | =IF(H2=0,IF(G2<=設定!$C$2,1,0),MIN(1,MAX(0,NETWORKDAYS(G2,設定!$C$2,設定!$A$2:$A$20)/H2))) |
| 状態を出す | L2 | =IF(J2>=1,"完了",IF(J2<K2,"遅延",IF(J2>0,"進行中","未着手"))) |
| 期間バーを塗る | 条件付き書式(M2から右下) | =AND(M$1>=$G2,M$1<=$I2) |
| 進捗バーを塗る | 条件付き書式(同上) | =AND($H2>0,M$1>=$G2,M$1<=WORKDAY($G2-1,ROUND($H2*$J2,0),設定!$A$2:$A$20)) |
| 今日線を引く | 条件付き書式(同上) | =M$1=設定!$C$2 |
| 土日祝をグレーにする | 条件付き書式(同上) | =OR(WEEKDAY(M$1,2)>=6,COUNTIF(設定!$A$2:$A$20,M$1)>0) |
| 遅延の行に色を付ける | 条件付き書式(A2:L11) | =$L2="遅延" |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「ガントチャートの作り方 エクセル数式とMermaidのテンプレート」
ガントチャートの構成要素とWBSとの違い
ガントチャートは「表の部分」と「バーの部分」に分かれます。表の部分はWBS(作業分解構成図)から持ってくる情報、バーの部分は日付から自動で決まる情報と考えると、作る順番が整理できます。
| 観点 | WBS | ガントチャート |
|---|---|---|
| 答える問い | 何を作るか・何をやるか | いつやるか・どの順でやるか |
| 主な列 | 階層番号、作業名、成果物、担当、工数 | 開始日、終了日、先行タスク、進捗率、バー |
| 時間軸 | 持たない | 持つ(日・週・月) |
| 作る順 | 先 | 後(WBSの最下層を行にする) |
| 更新の頻度 | 範囲が変わったとき | 毎週〜毎日(進捗率と基準日) |
WBSの表をガントチャートに変換する列対応の早見表
WBSがすでにある場合は、次の対応で列を移すとガントチャートの表の部分ができます。
| WBSの列 | ガントチャートの列 | 変換のしかた |
|---|---|---|
| 階層番号(1.2.3 など) | No | 最下層の行だけを残し、重複しない番号を振る。先行タスクの指定はこの番号で行う |
| 上位階層の名前(工程・成果物) | 見出し行 | 行をグループ化する見出しにする(Mermaid では section) |
| 最下層の作業名 | タスク | そのまま移す。「〜を作成」「〜をレビュー」のように動詞で終える |
| 担当 | 担当 | そのまま移す。1行に1人を基本にする |
| 見積工数(人日) | 日数 | 工数÷担当人数を切り上げて稼働日数にする(=ROUNDUP(工数/人数,0)) |
| 前提・依存する作業 | 先行1・先行2 | 先に終わっている必要があるタスクの No を書く |
| 完了条件 | 進捗率の基準 | 「着手で50%、レビュー完了で100%」のように段階を決めておく |
| 承認・納品などの節目 | マイルストーン行 | 日数を 0 にした行として追加する |
| (WBSにはない) | 開始日・終了日 | 最初の1行だけ手入力し、残りは数式で出す |
手順1:貼り付け用のテンプレートを用意する
次のブロックをコピーし、新しいシート(シート名を「ガント」にする)の A1 に貼り付けます。タブ区切りなので、列が分かれて入ります。F列・I列・K列・L列と、G3 より下は手順2の数式で埋めるため空にしてあります。
No タスク 担当 先行1 先行2 先行終了 開始日 日数 終了日 進捗率 予定進捗 状態
1 要件確認 佐藤 2026/10/5 5 100%
2 画面設計 鈴木 1 4 100%
3 DB設計 高橋 1 3 100%
4 設計レビュー完了 佐藤 2 3 0 100%
5 予約API実装 高橋 4 6 80%
6 予約画面実装 鈴木 4 6 25%
7 通知メール実装 高橋 5 3 0%
8 利用者マニュアル作成 田中 6 3 0%
9 結合テスト 田中 6 7 5 0%
10 リリース判定 佐藤 8 9 0 0%
続けて「設定」という名前のシートを作り、祝日と基準日を入れます。
祝日 基準日
2026/10/12 =TODAY()
2026/11/3
2026/11/23
基準日を1つのセルにまとめておくと、「先週金曜時点の状態」のように日付を固定して見ることもできます。 この記事の計算結果は、基準日を 2026/10/22 に固定して出したものです。
入力のルールは次の3つです。
| 列 | ルール |
|---|---|
| 先行1・先行2 | 自分より上の行の No だけを書く(下の行を先行に指定しない) |
| 日数 | 土日祝を除いた稼働日数。マイルストーンは 0 |
| 進捗率 | 0〜100%。判定の段階をチームで決めておく |
手順2:開始日と終了日を数式で出す(依存関係つき)
2行目(最初のタスク)は開始日を手入力し、3行目から下は先行タスクの終了日から開始日を計算します。
I2 : =IF(H2=0,G2,WORKDAY(G2,H2-1,設定!$A$2:$A$20))
F3 : =MAX(IFERROR(INDEX($I$1:I2,MATCH(D3,$A$1:A2,0)),0),IFERROR(INDEX($I$1:I2,MATCH(E3,$A$1:A2,0)),0))
G3 : =IF(H3=0,F3,WORKDAY(F3,1,設定!$A$2:$A$20))
K2 : =IF(H2=0,IF(G2<=設定!$C$2,1,0),MIN(1,MAX(0,NETWORKDAYS(G2,設定!$C$2,設定!$A$2:$A$20)/H2)))
L2 : =IF(J2>=1,"完了",IF(J2<K2,"遅延",IF(J2>0,"進行中","未着手")))
I2・K2・L2 は11行目まで、F3・G3 も11行目までコピーします。F・G・I列の表示形式は日付にします。
式の意味は次のとおりです。
| セル | 何をしているか |
|---|---|
| I2(終了日) | 開始日を1日目と数えるので、進める日数は「日数−1」。日数が 0 の行(マイルストーン)は開始日と同じ日にする |
| F3(先行終了) | 先行1と先行2の No を上の行から探し、終了日の遅いほうを採用する。先行が空欄なら 0 になる |
| G3(開始日) | 先行終了の翌稼働日。マイルストーンは先行が終わった日と同じ日にする |
| K2(予定進捗) | 開始日から基準日までの稼働日数÷日数。0〜1 の範囲に収める |
| L2(状態) | 進捗率が予定進捗より小さければ「遅延」 |
F3 の参照範囲を $I$1:I2 のように「自分の1つ上の行まで」にしているのがポイントです。自分の行を含まない範囲にしておくと、終了日と開始日が互いを参照し合う循環参照になりません。
計算結果
上の式を入れて計算した結果です(基準日 2026/10/22)。
| No | タスク | 先行終了 | 開始日 | 日数 | 終了日 | 進捗率 | 予定進捗 | 状態 |
|---|---|---|---|---|---|---|---|---|
| 1 | 要件確認 | 2026-10-05 | 5 | 2026-10-09 | 100% | 100% | 完了 | |
| 2 | 画面設計 | 2026-10-09 | 2026-10-13 | 4 | 2026-10-16 | 100% | 100% | 完了 |
| 3 | DB設計 | 2026-10-09 | 2026-10-13 | 3 | 2026-10-15 | 100% | 100% | 完了 |
| 4 | 設計レビュー完了 | 2026-10-16 | 2026-10-16 | 0 | 2026-10-16 | 100% | 100% | 完了 |
| 5 | 予約API実装 | 2026-10-16 | 2026-10-19 | 6 | 2026-10-26 | 80% | 67% | 進行中 |
| 6 | 予約画面実装 | 2026-10-16 | 2026-10-19 | 6 | 2026-10-26 | 25% | 67% | 遅延 |
| 7 | 通知メール実装 | 2026-10-26 | 2026-10-27 | 3 | 2026-10-29 | 0% | 0% | 未着手 |
| 8 | 利用者マニュアル作成 | 2026-10-26 | 2026-10-27 | 3 | 2026-10-29 | 0% | 0% | 未着手 |
| 9 | 結合テスト | 2026-10-29 | 2026-10-30 | 5 | 2026-11-06 | 0% | 0% | 未着手 |
| 10 | リリース判定 | 2026-11-06 | 2026-11-06 | 0 | 2026-11-06 | 0% | 0% | 未着手 |
読み取れることは3つあります。
- 画面設計の開始日が 10/13 になっている:先行の要件確認は 10/9(金)に終わり、10/10・10/11 は土日、10/12 は祝日なので、翌稼働日は 10/13 です
- 結合テストは 5 日の作業で 10/30〜11/6:土日と 11/3 の祝日を飛ばしています。終了日から逆に
=NETWORKDAYS(G10,I10,設定!$A$2:$A$20)で数えると 5 になり、日数の列と一致します - 設計レビュー完了は先行2件のうち遅いほう(画面設計の 10/16)に合っている:DB設計は 10/15 に終わりますが、MAX で遅いほうを採用しています
手順3:日付の見出しを作る
M1 に最初の日付、N1 から右に「左のセル+1」を入れます。
M1 : =$G$2
N1 : =M1+1 (右方向へ必要な日数ぶんコピー)
表示形式を d や m/d にして列幅を狭くすると、1画面に1〜2か月ぶんが収まります。今回の題材は 10/5〜11/7 の34列(M列〜AT列)を使いました。
手順4:条件付き書式でバーを塗る(5種)
バーの範囲(今回は M2:AT11)を選び、数式を使うルールを5つ登録します。Excel では[ホーム]タブの[条件付き書式]から[ルールの管理]を開き、ルールの種類で[数式を使用して、書式設定するセルを決定]を選んで式を入力します。
| 順位 | 種類 | 式(左上の M2 を基準に書く) | 書式の例 |
|---|---|---|---|
| 1 | 今日線 | =M$1=設定!$C$2 |
赤の塗りつぶし |
| 2 | 土日祝 | =OR(WEEKDAY(M$1,2)>=6,COUNTIF(設定!$A$2:$A$20,M$1)>0) |
薄いグレー |
| 3 | 進捗バー | =AND($H2>0,M$1>=$G2,M$1<=WORKDAY($G2-1,ROUND($H2*$J2,0),設定!$A$2:$A$20)) |
濃い青 |
| 4 | 期間バー | =AND(M$1>=$G2,M$1<=$I2) |
薄い青 |
| 5 | 遅延(範囲は A2:L11) | =$L2="遅延" |
薄いオレンジ |
マイルストーンを目立たせたい場合は、進捗バーの上に次のルールを足します。
=AND($H2=0,M$1=$G2)
式の読み方
M$1は「列は動く・行は1行目に固定」、$G2は「列はG列に固定・行は動く」 という指定です。範囲のどのセルから見ても「その列の日付」と「その行の開始日」を比べられます- 期間バーは「日付が開始日以上、かつ終了日以下」のセルを塗ります
- 進捗バーは「開始日から、完了した日数ぶん」だけ塗ります。完了した日数は
ROUND(日数×進捗率,0)で、土日祝を飛ばして数えるために WORKDAY を使っています。進捗率が 0% のときは開始日の前日が返るので、どのセルも塗られません - 土日祝は
WEEKDAY(日付,2)が 6(土)か 7(日)のとき、または祝日一覧に同じ日付があるときに塗ります
ルールの順番
Microsoft のサポートページによると、複数のルールは[条件付き書式ルールの管理]ダイアログの一覧の上から順に、その優先順位で評価されます。同じセルに複数のルールが当てはまるので、表の順位どおり「今日線 → 土日祝 → 進捗バー → 期間バー」の順に上から並べます。 期間バーを一番上にすると、進捗バーや土日のグレーが見えなくなります。
5つの式を計算した結果
条件付き書式の式をそのままセルに入れ、どの式が当てはまるかを1文字で表示したものです(T=今日線、-=土日祝、M=マイルストーン、P=進捗バー、B=期間バー、.=塗りなし)。上の3行は日付(月・日の十の位・日の一の位)です。
0 1
0000011111111112222222222330000000
5678901234567890123456789011234567
PPPPP---....--...T.--.....--.-...- 要件確認
.....---PPPP--...T.--.....--.-...- 画面設計
.....---PPP.--...T.--.....--.-...- DB設計
.....---...M--...T.--.....--.-...- 設計レビュー完了
.....---....--PPPTP--B....--.-...- 予約API実装
.....---....--PPBTB--B....--.-...- 予約画面実装
.....---....--...T.--.BBB.--.-...- 通知メール実装
.....---....--...T.--.BBB.--.-...- 利用者マニュアル作成
.....---....--...T.--....B--B-BBB- 結合テスト
.....---....--...T.--.....--.-..M- リリース判定
- 予約API実装(進捗80%)は、6日×0.8=4.8 を四捨五入した5日ぶんが P になり、今日線(10/22)を1日越えています。予定より進んでいることがバーでわかります
- 予約画面実装(進捗25%)は2日ぶんだけ P で、今日線の手前に B(まだ終わっていない期間)が残っています。L列の状態も「遅延」になり、行に色が付きます
- 10/12(祝日)と 11/3(祝日)は、土日と同じ「-」になっています
同じブックを LibreOffice Calc で画像に書き出し、5色が上の文字と同じ位置に塗られることも確かめました。
WORKDAYとNETWORKDAYSの使い方
ガントチャートの日付計算は、この2つの関数でほぼ足ります。
| 関数 | 書式 | 返すもの |
|---|---|---|
| WORKDAY | WORKDAY(開始日, 日数, [祝日]) |
開始日から、土日と祝日を除いて指定した日数だけ進めた(戻した)日付 |
| NETWORKDAYS | NETWORKDAYS(開始日, 終了日, [祝日]) |
開始日から終了日までの、土日と祝日を除いた日数(両端を含む) |
Microsoft のサポートページでは、WORKDAY の日数は正の数で未来、負の数で過去の日付になり、整数以外を指定すると小数点以下が切り捨てられると説明されています。土日以外を休みにしたい場合は WORKDAY.INTL・NETWORKDAYS.INTL を使うよう案内されています。
単体での計算結果
祝日の範囲(設定!A2:A20)に 2026/10/12・11/3・11/23 を入れた状態で計算した結果です。
| 式 | 結果 | 意味 |
|---|---|---|
=WORKDAY(DATE(2026,10,5),5-1,設定!$A$2:$A$20) |
2026/10/9 | 10/5 を1日目として5日目 |
=WORKDAY(DATE(2026,10,9),1,設定!$A$2:$A$20) |
2026/10/13 | 金曜の翌稼働日(土日と祝日を飛ばす) |
=WORKDAY(DATE(2026,10,9),1) |
2026/10/12 | 祝日を渡さないと祝日の月曜になる |
=WORKDAY(DATE(2026,10,13),-1,設定!$A$2:$A$20) |
2026/10/9 | 負の数で前の稼働日に戻る |
=WORKDAY(DATE(2026,10,30),5-1,設定!$A$2:$A$20) |
2026/11/6 | 11/3 の祝日を飛ばす |
=NETWORKDAYS(DATE(2026,10,5),DATE(2026,11,6),設定!$A$2:$A$20) |
23 | 全体の稼働日数 |
=NETWORKDAYS(DATE(2026,10,5),DATE(2026,11,6)) |
25 | 祝日を渡さない場合 |
=DATE(2026,11,6)-DATE(2026,10,5)+1 |
33 | 暦日数(土日祝を含む) |
=WORKDAY.INTL(DATE(2026,10,9),1,"0000001",設定!$A$2:$A$20) |
2026/10/10 | 日曜だけを休みにした場合 |
=NETWORKDAYS.INTL(DATE(2026,10,5),DATE(2026,11,6),"0000001",設定!$A$2:$A$20) |
27 | 日曜と祝日を除いた日数 |
全体は暦日で33日、稼働日では23日です。 タスクの日数を合計するときや、残りの稼働日数を出すときは NETWORKDAYS を使うと、暦日との差で見積もりがずれません。
WORKDAY.INTL の3番目の引数 "0000001" は、月曜から日曜までの7文字で、1 が休み、0 が稼働日を表します。
「日数−1」と「開始日−1」の使い分け
WORKDAY でよく迷うのが、1を引く位置です。
| 目的 | 式 | 理由 |
|---|---|---|
| 開始日を1日目として n 日目の日付 | WORKDAY(開始日, n-1, 祝日) |
開始日が稼働日であることが前提 |
| 開始日が休日でもよい形にする | WORKDAY(開始日-1, n, 祝日) |
前日から n 稼働日進めるので、開始日が土日でも次の稼働日から数える |
たとえば開始日が土曜の 10/10 の場合、=WORKDAY(DATE(2026,10,10)-1,1,設定!$A$2:$A$20) の結果は 2026/10/13 でした。進捗バーの式で「開始日−1」の形を使っているのは、進捗 0% のときに開始日より前の日付が返り、何も塗られないようにするためです。
Mermaidで同じガントチャートを書く
Mermaid は、テキストから図を描く記法です。同じ題材を gantt で書くと次のようになります。Markdown に貼れるので、設計書やREADMEと一緒にバージョン管理できます。
gantt
title 備品予約システム 開発スケジュール
dateFormat YYYY-MM-DD
axisFormat %m/%d
tickInterval 1week
weekday monday
excludes weekends, 2026-10-12, 2026-11-03, 2026-11-23
todayMarker off
section 設計
要件確認 :done, t1, 2026-10-05, 5d
画面設計 :done, t2, after t1, 4d
DB設計 :done, t3, after t1, 3d
設計レビュー完了 :milestone, done, m1, after t2 t3, 0d
section 実装
予約API実装 :active, t5, after m1, 6d
予約画面実装 :crit, active, t6, after m1, 6d
通知メール実装 :t7, after t5, 3d
利用者マニュアル作成 :t8, after t6, 3d
section テスト
結合テスト :t9, after t6 t7, 5d
リリース判定 :milestone, m2, after t8 t9, 0d
エクセルの列とMermaidの書き方の対応
| エクセルの列 | Mermaid の書き方 | 例 |
|---|---|---|
| タスク | 行の先頭(コロンの前) | 画面設計 |
| No | タスクID | t2 |
| 先行1・先行2 | after ID ID(空白区切りで複数) |
after t2 t3 |
| 開始日(手入力の行) | 日付 | 2026-10-05 |
| 日数 | 期間 | 4d |
| マイルストーン | milestone タグ+期間 0d |
:milestone, m1, after t2 t3, 0d |
| 祝日・土日 | excludes |
excludes weekends, 2026-10-12 |
| 状態 | done/active/crit タグ |
:crit, active, t6, … |
| 工程の見出し | section |
section 実装 |
タグは必ず先頭に書きます。Mermaid の公式ドキュメントでは、使えるタグは active・done・crit・milestone の4つで、excludes には YYYY-MM-DD 形式の日付、曜日名、weekends を指定できると説明されています。また、タスクの期間中に除外日がある場合は、その日数ぶんが終了側に足されて期間が保たれます。
描画結果とエクセルの日付を比べる
上のコードを描画し、出力された図のバーの位置から日付を読み取って、エクセルの計算結果と比べました。
| タスク | エクセルの開始〜終了 | Mermaid のバー |
|---|---|---|
| 要件確認 | 10/5〜10/9 | 10/5〜10/9 |
| 画面設計 | 10/13〜10/16 | 10/13〜10/16 |
| DB設計 | 10/13〜10/15 | 10/13〜10/15 |
| 予約API実装 | 10/19〜10/26 | 10/19〜10/26 |
| 予約画面実装 | 10/19〜10/26 | 10/19〜10/26 |
| 通知メール実装 | 10/27〜10/29 | 10/27〜10/29 |
| 利用者マニュアル作成 | 10/27〜10/29 | 10/27〜10/29 |
| 結合テスト | 10/30〜11/6 | 10/30〜11/6 |
| 設計レビュー完了(マイルストーン) | 10/16 | 10/19 の目盛り線上 |
| リリース判定(マイルストーン) | 11/6 | 11/9 の目盛り線上 |
タスクのバーは8件とも一致しました。 違いが出るのはマイルストーンの位置です。Mermaid のバーは「終了日の翌日の0時」までを塗るので、after で続くマイルストーンは「先行が終わった直後の、次の稼働日の0時」にひし形が描かれます。10/16(金)終了なら、土日を飛ばした 10/19(月)の線上です。意味としては「10/16 の作業が終わった時点」と同じなので、読み手にはその見方を伝えておくと混乱しません。
Mermaid で書くときに押さえる点
| 項目 | 内容 |
|---|---|
after の複数指定 |
after t2 t3 と書くと、遅く終わるほうに合わせて始まる(エクセルの MAX と同じ) |
| 祝日 | excludes に日付をカンマ区切りで足す。土日と連続する祝日は1つのグレーの帯にまとまる |
| 今日線 | 既定で表示される。資料用に消すときは todayMarker off |
| 目盛り | tickInterval 1week と weekday monday で、月曜始まりの週単位になる |
| 進捗率 | 進捗率の数値を書く欄はない。done(完了)・active(進行中)・crit(重点)のタグで状態を表す |
エクセルとMermaidの使い分け
| 判断の観点 | エクセル(表計算) | Mermaid |
|---|---|---|
| 進捗率を数値で追いたい | 向いている(進捗バー・遅延判定) | タグでの3段階表示 |
| 日付を表として配りたい | 向いている(開始日・終了日が列にある) | 図から読み取る |
| Git で差分を見たい | バイナリなので差分は見づらい | 向いている(テキスト) |
| 設計書やREADMEに埋め込みたい | 画像にして貼る | 向いている(コードのまま貼る) |
| タスクが50件を超える | フィルターやグループ化が使える | 図が縦に長くなる |
| 依存関係を変えて引き直す | 先行の番号を書き換える | after のIDを書き換える |
日々の進捗管理はエクセル、計画の共有や文書への埋め込みは Mermaid と分けると、それぞれの良さが生きます。エクセルの表から Mermaid の行を作るときは、次の式で1行ぶんの文字列を組み立てられます(先行1だけを使う場合)。
=B3&" :t"&A3&", after t"&D3&", "&H3&"d"
3行目(画面設計)に入れると 画面設計 :t2, after t1, 4d になります。
つまずきやすい点と直し方
| 起きること | 原因 | 直し方 |
|---|---|---|
| バーが1列ずれる | 条件付き書式の式の基準セルが、選択範囲の左上と合っていない | 範囲を M2 から選び直し、式も M$1・$G2 で書く |
| すべての行が同じ形に塗られる | $G$2 のように行まで固定している |
$G2 にして行を動かす |
| 終了日が土曜になる | WORKDAY ではなく「開始日+日数」で計算している | WORKDAY(開始日,日数-1,祝日) に置き換える |
| 祝日が飛ばされない | 祝日の範囲を渡していない、または祝日が文字列で入っている | 3番目の引数に範囲を指定し、祝日のセルを日付として入力する |
| 開始日が 1900 年前後の日付になる | 先行の No が上の行に見つからず、先行終了が 0 になっている(下の行や自分自身を指定した場合も同じ) | 行を並べ替えて、先行が必ず上の行に来るようにする |
| 進捗バーが見えない | 期間バーのルールが上にある | ルールの順番を「進捗バー → 期間バー」にする |
よくある質問
Q. 祝日の一覧はどこに置くのがよいですか?
A. 別シートに1列で置き、数式からは 設定!$A$2:$A$20 のように少し広めの範囲で参照するのがおすすめです。空のセルは計算に影響しないので、翌年の祝日を足すときに式を直さずに済みます。会社の休業日(年末年始など)も同じ列に足せます。
Q. 日単位ではなく週単位のガントチャートにできますか?
A. できます。日付の見出しを =M1+7 で7日おきにし、期間バーの式を =AND(M$1+6>=$G2,M$1<=$I2) にすると、「その週のどこかに期間がかかっていれば塗る」形になります。
Q. 先行タスクが3つ以上あるときはどうしますか? A. 先行3の列を足し、F列の式の MAX の中に同じ形の IFERROR をもう1つ足します。先行が多いタスクは、手前にマイルストーンを1つ置いてそこに集約すると、表も図も読みやすくなります。
Q. 進捗率はどう決めるとよいですか? A. 「着手で50%、完了で100%」のように段階を先に決めておくと、人によるばらつきが小さくなります。細かい数値で申告するより、判定の基準をそろえるほうが状態の列が安定します。
まとめ
- ガントチャートは「日付の数式」と「条件付き書式」の2つで作れる。表の部分は WBS の最下層から移す
- 終了日は
WORKDAY(開始日,日数-1,祝日)、稼働日数はNETWORKDAYS(開始日,終了日,祝日)で出す。題材では暦日33日に対して稼働日は23日だった - 依存関係は「先行の終了日の最大値の翌稼働日」。参照範囲を自分の1つ上の行までにすると循環参照にならない
- 条件付き書式は 今日線 → 土日祝 → 進捗バー → 期間バー の順に並べる。遅延は状態の列を見て行ごとに色を付ける
- 基準日を1つのセルにまとめると、今日線・予定進捗・状態が同じ日付で動く
- Mermaid では
after・milestone・excludes weekendsで同じ計画を書ける。タスク8件のバーはエクセルの計算結果と一致した - 進捗の管理はエクセル、計画の共有は Mermaid と使い分ける
参考
- Microsoft サポート「WORKDAY 関数」 https://support.microsoft.com/ja-jp/office/workday-関数-f764a5b7-05fc-4494-9486-60d494efbf33
- Microsoft サポート「NETWORKDAYS function」 https://support.microsoft.com/en-us/office/networkdays-function-48e717bf-a7a3-495f-969e-5005e3eb18e7
- Microsoft サポート「数式を使用して条件付き書式を適用する」 https://support.microsoft.com/ja-jp/office/数式を使用して条件付き書式を適用する-fed60dfa-1d3f-4e13-9ecb-f1951ff89d7f
- Mermaid 公式ドキュメント「Gantt diagrams」 https://mermaid.js.org/syntax/gantt.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「ガントチャートの作り方 エクセル数式とMermaidのテンプレート」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。