Back to blog

How to Build a Gantt Chart in Excel or Google Sheets: Template Columns and Formulas

Shusaku Yosa

You want a Gantt chart, but not badly enough to buy a dedicated tool — and you would rather start with the Excel or Google Sheets you already have. This article covers the column layout you can reuse as-is, the steps to build it, the conditional formatting formulas that draw the bars automatically, how to choose between Excel and Sheets, and the update rules that keep the chart from going stale.

What a Gantt chart actually shows you

A Gantt chart is a schedule table that puts tasks on the vertical axis and time on the horizontal axis, drawing each task's span from start date to end date as a horizontal bar. Henry Gantt, an American management consultant, devised the format in the 1910s, and more than a century later it is still the standard format for project management.

The biggest difference from a plain task list is that overlap becomes visible.

  • Whose work piles up and when (uneven load)
  • Which delay stops which downstream work (dependencies)
  • Where slack still remains (location of the buffer)

Information you would otherwise have to reconstruct by scanning dates in a list becomes readable from the relative position of the bars alone. As a document for stakeholders, it also cuts down significantly on verbal explanation.

How it differs from a WBS, and which comes first

The document most often confused with a Gantt chart is the WBS (Work Breakdown Structure). Their roles are clearly separated.

  • WBS: a complete hierarchical breakdown of what has to be done. It carries no time axis.
  • Gantt chart: those already-decomposed tasks with a "when" assigned to each one.

The order is WBS first, Gantt chart second. Skip the WBS and start drawing bars, and you end up with only the tasks that happened to come to mind; the ones you missed force their way in later and push the whole schedule out. List the work first, then add the dates. Following that order alone changes the accuracy of the plan considerably. For more detail, see how to build a WBS.

Choose one of three types before you start

The columns you need depend on what the chart is for. Deciding which of the three below applies before you start saves you from bolting on columns later.

  • Simple (daily, 1–2 months): task name and dates only. For short production jobs and one-off campaigns.
  • Standard (daily, 3–6 months): adds owner, progress, status and predecessor. Covers most internal projects.
  • Campaign (monthly, annual): grouped by campaign, with budget, actuals and KPI columns added. Works as an annual marketing calendar.

The rest of this article assumes the standard type, which is the most broadly applicable.

Template column structure

The standard type uses eleven columns, A through K, with column L onward given over to the date header. Reuse this layout as-is.

  • A: ID — a sequential number, so tasks can be referred to by ID.
  • B: Phase — the first level of the WBS: "Requirements", "Production", "Delivery" and so on.
  • C: Task name — granular enough that the owner can act on it immediately. Start with a verb.
  • D: Owner — one person per task. Listing several makes accountability vague.
  • E / F: Start date and end date — the source of the bars. These two must be entered in date format.
  • G: Days — calculated automatically on a working-day basis with NETWORKDAYS.
  • H: Progress — 0 to 100%. Steps of 25% are plenty.
  • I: Status — Not started / In progress / In review / Done / Delayed. A data-validation dropdown prevents wording drift.
  • J: Predecessor — the ID of the task that must finish before this one starts.
  • K: Notes — external dependencies and preconditions.

The predecessor column is the one most often dropped, but without it you cannot trace the blast radius when something slips. On any project where three or more tasks chain together, it is not optional.

Build it in five steps

  1. List the tasks: break the work down by phase and fill in the phase and task name columns first. Do not enter dates yet.
  2. Assign owners: settle on one name per task. If an owner cannot be decided, make deciding it a task in its own right.
  3. Add the durations: place tasks forward from the earliest date work can begin, rather than working backwards from the deadline. Backwards planning produces schedules that fit on paper but cannot be executed.
  4. Shift for dependencies: working down the predecessor column, push start dates later where needed. Only now is the real overall duration fixed.
  5. Place milestones and buffer: fix interim reviews and approval dates as milestones, and reserve 10–20% of the total as buffer ahead of them.

Formulas that draw the bars automatically

Draw the bars with conditional formatting rather than shapes or hand-filled cells. Because the bars then follow the dates, updating costs almost nothing. Here is how to set it up.

1. Build the date header

Starting immediately to the right of the row headers (column L in the standard type), lay dates across row 1. Put the project start date in the first cell, enter a formula equal to the previous cell plus one in the next cell, and copy it rightwards. Set up this way, changing the first cell slides the entire calendar. Setting the number format to a custom "d" shows only the day number, letting you narrow the columns to two or three points.

2. Paint the bars with conditional formatting

Select the range where the bars go (L2 and below) and add a rule of the "use a formula to determine which cells to format" type with the formula below. It assumes column E is the start date, column F the end date, and column L onward the date header.

=AND(L$1>=$E2, L$1<=$F2)

Specify a fill colour and the cells between the start and end dates turn into a coloured bar automatically. The critical part is how the absolute references are placed: the dollar sign before the row number (1) locks the date row, and the dollar signs before the column letters (E and F) lock the date columns. Get either wrong and the whole grid shifts.

3. Colour-code by state

Add further rules the same way. Progress lives in column H.

  • Grey out completed tasks: =AND(L$1>=$E2, L$1<=$F2, $H2>=1)
  • Turn overdue tasks red: =AND(L$1>=$E2, L$1<=$F2, $F2<TODAY(), $H2<1)
  • Shade weekends: =WEEKDAY(L$1,2)>5
  • Mark today with a vertical line: =L$1=TODAY()

Conditional formatting rules higher in the list take precedence. Order them today, overdue, complete, normal bar, weekend, and nothing you need to see gets hidden.

Excel or Google Sheets: which to build it in

Everything above — the column layout, NETWORKDAYS, the conditional formatting — works identically in both. The deciding factor is not features but how the chart will be shared.

  • Excel suits you when: everyone involved is internal, you want to link it by formula to existing quotes or effort sheets, or you need to work offline.
  • Google Sheets suits you when: external partners are involved, several people update it at once, or you want an edit history.

The rule of thumb is simple: if two or more people will update it, use Sheets. Circulate an Excel file by email or chat and the versions will fork. The moment a file named something like "schedule_revised_final2.xlsx" appears, the chart has stopped being a document anyone can trust.

Three ways this goes wrong in practice

The granularity is too fine to maintain

Write in tasks shorter than a day and the effort of updating starts to squeeze out project management itself. Aim for two to five working days per task. Anything smaller belongs on the owner's personal to-do list, not on the chart.

Nobody updates it after the day it was made

This is the most common failure, and the cause is that no update timing was ever agreed. Decide a rule — the first ten minutes of the weekly meeting go to updating progress, say — on the same day you build the chart. An out-of-date Gantt chart is not neutral: the moment it diverges from reality it becomes material for bad decisions.

There is no buffer, so one delay propagates through everything

Bury a private buffer inside each task estimate and the slack gets consumed within that task every time. Buffer works better held at the end of a phase than distributed across individual tasks. Ten to twenty percent of the total is a reasonable target.

Where spreadsheet management runs out

A Gantt chart in Excel or Sheets works perfectly well for a single project. Management costs climb sharply, though, once any of the following is true.

  • More than ten campaigns are running and the files have scattered, so no cross-cutting view exists
  • Budget and actuals live in a separate file from the schedule, so reconciling them takes real effort
  • Nobody can see how loaded each person is across concurrent projects

Once maintaining the template starts eating into your time, that is the signal to reconsider the tool. Xtrategy manages campaign schedules alongside budget and KPIs on a single screen, so progress across multiple campaigns can be reviewed together. For managing work at the campaign level, see also the marketing campaign management template.

Summary

  • A Gantt chart visualises when. Work out what first, with a WBS.
  • The five columns that carry the layout are start date, end date, owner, progress and predecessor.
  • Bars can be drawn automatically with conditional formatting: =AND(L$1>=$E2, L$1<=$F2)
  • If two or more people will update it, build it in Google Sheets.
  • Deciding when it gets updated, on the day you build it, is the only thing that stops it going stale.
Back to blog