日程が1日ずれるたびに、セルの色を塗り直していた。40行の工程表で、1つのタスクが3日遅れると、上流の帯を消して下流の帯を引き直す。塗り漏れが出て、会議で「この帯、先週のままですよね」と言われた。配布している工程表のテンプレートは、その塗り直しをやめるために作ったもので、帯は全部、条件付き書式の式が引いている。開始と終了を直せば、帯は勝手に動く。
この記事は、その式を1本ずつ読み解く。式の結果は2026年9月20日にMicrosoft 365のExcel(バージョン16)で、条件付き書式が実際に表示した色をセルごとに読み取って確かめた。
条件付き書式の式は、左上のセルに対して書く
条件付き書式の「数式を使用して、書式設定するセルを決定」は、選んだ範囲の左上のセルに対する式を1本書くと、Excelがそれを範囲内の全セルにずらして評価する仕組みだ。ずれてほしい参照とずれてほしくない参照を、ドルの位置で分ける。これがガントチャートの帯の全部と言っていい。
テンプレートの日単位のシートは、6行目に日付が横に並び、8行目からタスクが縦に並ぶ。D列が開始、E列が終了、F列が進捗、H列が1日目。帯の範囲はH8から右下まで。左上のH8に対して書く式は、列ごとに変わってほしい日付を H$6(行だけ固定)、行ごとに変わってほしい開始と終了を $D8 $E8(列だけ固定)と書く。
帯を引く式は、上から順に4本
テンプレートに入っている式を、ルールの並び順で写す。コピーして使うなら、範囲を左上のH8から選んでから、この順に「新しいルール」で足す。上の3本は「条件を満たす場合は停止」にチェックを入れる。
1. マイルストーン(オレンジ)
=AND($D8<>"",$D8=$E8,H$6=$D8)
2. 進捗済み(濃い青)
=AND($D8<>"",$E8<>"",H$6>=$D8,H$6<=$D8+ROUND(($E8-$D8+1)*$F8,0)-1)
3. 予定(薄い青)
=AND($D8<>"",$E8<>"",H$6>=$D8,H$6<=$E8)
4. 今日の線(左右の罫線を赤)
=H$6=$B$3
5. 日曜と祝日(薄い赤)
=OR(WEEKDAY(H$6)=1,COUNTIF('祝日'!$A:$A,H$6)>0)
6. 土曜(薄い青灰)
=WEEKDAY(H$6)=7
予定の式は「その列の日付が、開始以上かつ終了以下」。開始か終了が空欄なら引かない。マイルストーンは開始と終了が同じ日のときだけ、その1列を塗る。今日の線は、B3の日付(初期値は =TODAY())と一致する列に罫線を引く。土日と祝日は帯より下に置いてあるので、帯があるところには色が乗らず、帯がないところだけ色が付く。
確かめた結果を書いておく。10月6日から17日の12日間のタスクに進捗60%を入れると、6日から12日までの7列が濃い青、13日から17日が薄い青、帯の外の18日(日曜)は薄い赤だった。10月10日と11日は土日だが帯の中なので濃い青のまま。11月25日だけのタスクは、その1列がオレンジで前後は白。B3を10月9日に固定すると、その列の左右に赤の中太線が付いた。
進捗で濃くなる範囲は、日数×進捗率を丸めて数える
進捗済みの式の中身は、開始日に「日数×進捗率」を四捨五入した日数を足して、1を引いた日までを塗っている。12日×60%は7.2日で、四捨五入して7日。だから6日から12日までが濃い。27日間のタスク(10月15日から11月10日)に20%なら5.4日で5日、15日から19日まで。
四捨五入は、ExcelのROUNDが0.5を切り上げる側に丸めることを知っておく。12日×37.5%は4.5日で、ROUNDは5を返す。手元で確かめると、10日まで濃く、11日から薄かった。「半分の日を切り捨てたい」なら、ROUNDDOWNに変える。
この式は進捗を「開始から連続して終わった」とみなしている。実際の作業が飛び飛びでも、色は前から詰めて付く。それでも進捗率を1つ入れるだけで見た目が変わることを優先した。
帯が消える4つの間違い。全部、手元で再現した
塗り直しはなくなったが、代わりに「式が正しいのに帯が出ない」場面を何度か踏んだ。原因はどれも式の外にある。
ルールの順番。予定(薄い青)を進捗済み(濃い青)より上に置くと、全部が薄い青になる。予定の条件は進捗済みの条件を含んでいるので、先に一致した予定の色で止まる。試しに2本の順番を入れ替えると、12日間60%のタスクは6日から17日まで全部薄い青だった。「ルールの管理」で順番を戻せば直る。順番は上が優先で、「条件を満たす場合は停止」があるところで評価が止まる。
範囲の先頭行と式の行のずれ。範囲をH9から選んでいるのに、式は $D8 のまま。こうすると各行が1つ上のタスクの帯を表示する。再現すると、9行目に8行目のタスク(6日から17日)の帯が出て、8行目には何も出ず、9行目にあるはずの10月1日から7日の帯は消えた。範囲の左上のセルと、式に書く行番号は同じでないといけない。2行目から選び直したとき、書式のコピーで別の場所に貼ったとき、先頭に行を挿入したときに起きる。「ルールの管理」を開いて、「適用先」の先頭と式の行番号を見比べる。
開始日が文字列で入っている。Webの案件管理からコピーすると、見た目は2026/10/15でも文字列のことがある。このとき日数の列は27と出る。引き算では文字列の日付が数値に読み替えられるからだ。ところが条件付き書式の H$6>=$D8 は、数値と文字列の比較になって成り立たず、帯だけが出ない。日数が合っているのに帯がない、という状態で気づく。=ISTEXT(D8) を横に置いてTRUEなら、データタブの「区切り位置」で日付に変換する。
進捗に60と入れる。60%のつもりで60と入れると、日数×60で開始から数百日ぶんが濃くなり、表の右端まで濃い青になった。10月17日で終わるタスクが、11月30日の列まで濃い。進捗の列は表示形式をパーセントにして、0.6が60%と表示されるようにしておく。式の側でも MIN(1,$F8) のように1で頭打ちにすると、間違えて100を入れても終了日で止まる。
帯が出ないときに私が見る順番は決まっている。ホームタブの「条件付き書式」から「ルールの管理」を開き、表示を「このワークシート」にして、まず「適用先」の先頭セルと式の行番号が同じかを見る。次にルールの並び順と「停止」のチェック。それでも直らなければ、開始と終了の列に =ISTEXT(D8) を置いて文字列を疑い、最後に進捗の列の値が0から1の間かを見る。4つの間違いは、この4か所で全部見つかる。式そのものを疑うのは、この後でいい。
週単位の式は「その週に1日でも重なれば塗る」
週単位のシートは1列が1週で、6行目にはその週の月曜が入っている。帯の条件は、週の終わり(月曜+6)が開始以上で、月曜が終了以下。1日でも重なる週を塗る。
予定(週): =AND($D8<>"",$E8<>"",H$6+6>=$D8,H$6<=$E8)
進捗済み(週): =AND($D8<>"",$E8<>"",$F8>0,H$6+6>=$D8,H$6<=$D8+ROUND(($E8-$D8+1)*$F8,0)-1)
進捗済みの式に $F8>0 が入っているのは、日単位にはない条件だ。進捗0%のとき、濃く塗る終わりの日は「開始日の前日」になる。日単位なら開始日より前の列は帯の外なので何も起きないが、週単位だと、開始日が週の途中にある場合に「開始日の前日を含む週」は開始日を含む週でもある。条件が成り立って、0%なのに最初の週が濃くなる。これを防ぐために、進捗が0より大きいときだけ濃くする。
自分の表に移すときに変える場所は3つ
日付の行番号、開始と終了の列、範囲の左上。式の中の H$6 は自分の日付の行に、$D8 $E8 $F8 は自分の列に変え、ドルの位置はそのまま残す。範囲は、式に書いた行から選び始める。この3つがそろえば、列の数を365日に増やしても式は変わらない。
大きくしすぎると再計算が重くなる。テンプレートは62列×40行で、条件付き書式のセルが2,480個、ルールが6本。365日×200行にすると7万セルを超えて、入力のたびに待たされる。長い工程は週単位のシートに移したほうがいい。
条件付き書式の式をAIに書かせると、ドルの位置を落とした式が返ってくることが多い。帯が全部の行に出たり、1列しか塗られなかったりしたら、まずドルを見る。式の頼み方と確かめ方は、AIに数式を頼むときの記事に書いた。



