HomeGuides › Gantt chart in Excel

How to Make a Gantt Chart in Excel

By the gantts.app teamUpdated July 14, 202610 min read

Excel has no built-in Gantt chart, but you can make one from a stacked bar chart: build a table of tasks with start dates and durations, chart it as a stacked bar, hide the start series, reverse the task order, then format the dates and colors. Here is the full method — plus a faster free alternative.

On this page
  1. Does Excel have a Gantt chart?
  2. Step 1: Build the task table
  3. Step 2: Insert a stacked bar chart
  4. Step 3: Make the Start series No Fill
  5. Step 4: Reverse the task order
  6. Step 5: Format dates & colors
  7. A worked example: six tasks, then a slip
  8. Adding dependencies & % complete
  9. Automatic Gantt via conditional formatting
  10. What Excel does and does not give you
  11. Free Excel template
  12. The faster alternative
  13. Frequently asked questions
What a spreadsheet gives you, and what it does not:
TasksCritical pathTodayExcelSheetsSlidesBrowser

Does Excel have a Gantt chart?

No — Excel has no native Gantt chart type. The Insert Chart menu offers columns, bars, lines and pies, but nothing labeled "Gantt." The universal workaround is to take a stacked bar chart and make the first segment invisible, so the visible segments float at their start dates and line up like Gantt bars. Microsoft ships a few "Gantt project planner" templates on the New workbook screen, but those use the same trick (or conditional formatting) underneath. The steps below build one from scratch.

Step 1: Build a table with task, start, end & duration

On a blank sheet, create four columns: Task, Start, End, and Duration. Enter your tasks and real dates in Start and End, formatted as dates. Then compute Duration in days with a simple formula — if Start is in B2 and End is in C2, put =C2-B2+1 in D2 and fill it down. Excel stores dates as serial numbers, so the subtraction returns a plain number of days. The +1 is there because a task that starts and ends on the same day still takes one day — without it every bar draws a day short and a one-day task vanishes. A small example, with each task starting the day after its predecessor ends:

TaskStartEndDuration
ResearchJul 1Jul 55
DesignJul 6Jul 127
BuildJul 13Jul 2614
TestJul 27Aug 27
LaunchAug 3Aug 42

If you would rather treat End as the handover moment, so the next task starts on the same date, use =C2-B2 instead. Either convention works; mixing them is what produces a chart quietly one day out on every row.

Step 2: Insert a stacked bar chart

Select the Task and Start columns, then hold Ctrl and add the Duration column (leave End out — the chart needs only Start and Duration). Go to Insert → Charts → Bar → 2-D Stacked Bar. Excel draws two series stacked in each row. It will not look like a Gantt chart yet; that is expected. If Excel picks up the wrong data, use Select Data to confirm Start is series one and Duration is series two.

Rather not fight the chart tools? Build the same schedule free in your browser with the gantts.app Gantt maker — no stacked-bar trickery — then export it straight to Excel (.xlsx), plus PowerPoint, PDF and PNG. No sign up, no download.

Step 3: Make the Start series No Fill

This is the key move. Click once on any Start segment to select the whole Start series, right-click and choose Format Data Series, open the paint-bucket (Fill) options, and set Fill: No Fill. The Start segments vanish, leaving each Duration bar floating at its correct start date. Suddenly it reads like a Gantt chart. If you also see a border, set Border: No Line so no outline remains where the invisible segment used to be.

Week 1–8Phase 1Task ATask BPhase 2Task CMilestoneToday
The invisible Start segment is what pushes each Duration bar to its date.

Step 4: Reverse the task order

Excel plots the first table row at the bottom of a bar chart, so your tasks appear upside down. Fix it by clicking the vertical axis (the list of task names), right-click, choose Format Axis, and under Axis Options tick Categories in reverse order. Your first task jumps to the top and the list now reads top-to-bottom in the same order as your table. You will usually also want to tick "Horizontal axis crosses: At maximum category" in the same panel so the date axis stays at the top.

Step 5: Format dates & colors

Two finishing touches. First, the date axis usually starts at zero, leaving a big empty gap: click the horizontal axis, open Format Axis, and set the Minimum bound to your project's start and the Maximum to its end. Excel wants these as serial numbers — type the date in an empty cell, format it as General, and read the number off. Set a major unit (7 for weekly gridlines) and a clean date format. Then recolor the Duration series and delete the legend. You now have a working Excel Gantt chart.

A worked example: six tasks, then a slip

The five steps above are mechanical. What decides whether the file survives a real project is what the formulas are, and what happens to them when the plan changes.

The sheet. A website replatform kicking off Monday 2 March 2026. Headers in row 1, tasks in rows 2–7. Columns: A Task, B Start, C End, D Working days, E Bar length. Holidays in H2:H4. Only column D is typed by hand; the rest is derived:

  • C2, the End — =WORKDAY(B2,D2-1,$H$2:$H$4). The -1 matters: WORKDAY counts forward, so a task starting Monday and taking 5 working days ends on WORKDAY(Mon,4), Friday. Omit it and every task runs a day long.
  • B3, the Start of each following task — =WORKDAY(C2,1,$H$2:$H$4). This one formula is what makes the sheet reschedule at all.
  • E2, the number the chart plots — =C2-B2+1. Not D2. D is working days; the chart's axis is a calendar including weekends, so a 10-working-day task must draw as a 12-day bar. Confusing the two is the commonest reason an Excel Gantt disagrees with its own table.

Fill C2 and E2 down rows 2–7 and B3 down rows 3–7:

RowA — TaskB — StartC — EndD — Working daysE — Bar length
2DiscoveryMon 2 MarFri 13 Mar1012
3DesignMon 16 MarFri 27 Mar1012
4BuildMon 30 MarFri 24 Apr2026
5Content migrationMon 27 AprFri 15 May1519
6QAMon 18 MayFri 29 May1012
7Go liveMon 1 JunMon 1 Jun11

The axis. Excel wants serial numbers, not dates, for axis bounds. Type =B2 into a spare cell and format it General to read one off: 2 March 2026 is 46083, 1 June 2026 is 46174. Those go in Minimum and Maximum, with Major unit 7 for weekly gridlines.

Now change something. Design overruns by three days. Edit one cell — D3 from 10 to 13 — and the chain re-computes: Design ends Wed 1 Apr, Build runs Thu 2 Apr to Wed 29 Apr, Content migration Thu 30 Apr to Wed 20 May, QA Thu 21 May to Wed 3 Jun, go-live Thu 4 Jun. Three days in, three days out. That is the sheet at its best, and it is genuinely useful.

And here is what breaks.

  1. The last bar runs off the chart. Go-live moved to 4 Jun, past the 46174 hardcoded as the axis Maximum. The bar is clipped, and nothing warns you. Every date change means re-reading a serial and re-typing a bound.
  2. An inserted row half-joins the plan. Add "Client review" between Design and Build: Excel extends the chart's data range, but the new row arrives with no formulas, and the old Build row still points at Design. Miss that and the plan reads correctly while scheduling wrongly. Append below row 7 instead and it falls outside the range and never appears at all.
  3. A second predecessor has nowhere to live. If QA needs both Build and Content migration, the honest formula is =WORKDAY(MAX(C4,C5),1,$H$2:$H$4). It works — but nothing on the chart shows the link, and the next editor sees only a date. Add a five-day client review as lag and it becomes =WORKDAY(C3,1+5,$H$2:$H$4): a bare 5 inside a formula, labelled nowhere.

Column B as a formula buys you rescheduling down a single chain. It does not buy you a network. Nothing here can tell you which pair of tasks drives the finish date, because nothing here knows they are linked.

Finish → Start + LagALag 3dBB waits for A + 3d
Lag is real schedule time. In a spreadsheet it is a number buried in a formula.

Adding dependencies & % complete

This is where the limits show. Dependencies are not supported natively: there are no finish-to-start arrows, and Excel has no idea one task constrains another. The workaround, as above, is a formula in Start pointing at the predecessor's End, which handles a single chain. It cannot express start-to-start or finish-to-finish links at all, needs a hidden MAX() for two predecessors, and breaks silently when someone sorts the rows — sorting moves values but leaves relative references pointing at whatever now sits above.

Finish → StartABB waits for AStart → StartABB waits for AFinish → FinishABB waits for AStart → FinishABB waits for A
The four link types. A formula in the Start column can only approximate the first.

Percent complete needs helper columns, and the instruction usually given for it is wrong. Adding a Progress series on top of Start and Duration makes each bar longer by the work already done — a task at 100% draws at twice its true length. The correct build uses three series and drops the plain bar-length one. With % Complete in column F, add Done as =E2*F2 and Remaining as =E2*(1-F2).

Chart Start, Done and Remaining in that order: Start on No Fill, Done dark, Remaining light. The two visible segments always sum to E, so each bar keeps its true calendar footprint and fills from the left as work progresses. Every added task then means re-checking the data range and the series order, which Excel will cheerfully rearrange when that range changes.

Automatic Gantt via conditional formatting

If you would rather avoid charts entirely, build a conditional-formatting Gantt in the cells. It is sturdier, because there is no chart object with a data range to fall out of date.

Keep the same table in A–E. Put a calendar across row 1 from column G: =B2 in G1, =G1+1 in H1, dragged right for the length of the project — 2 March to 1 June inclusive is 92 days, so out to column CT. Format the row as ddd and narrow the columns to about 20 pixels.

Select G2:CT7 with G2 as the active cell — that matters, because the formula is written from the active cell's point of view and offset for every other. Under Home → Conditional Formatting → New Rule → Use a formula, add three rules in this order:

  1. =AND(G$1>=$B2, G$1<=$C2) — your bar colour. The mixed references are the whole trick: G$1 locks the row so each column reads its own date, $B2 locks the column so each row reads its own task's dates.
  2. =WEEKDAY(G$1,2)>5 — light grey. Return type 2 numbers Monday as 1 through Sunday as 7, so >5 is exactly Saturday and Sunday. The default type 1 starts on Sunday and would shade the wrong two days.
  3. =G$1=TODAY() — a coloured left border, giving you a today line.

Rules evaluate top down and the first fill wins, so the bar rule must sit above the weekend rule or every bar grows grey stripes on Saturdays. This updates the moment a date changes, prints cleanly, and tolerates inserted rows better than the chart — but milestones and progress still need manual rules, and it still knows nothing about dependencies.

What Excel does and does not give you

Both methods draw a perfectly respectable picture of a schedule. Neither of them schedules anything. That distinction is easy to lose once the bars look right, so here it is plainly:

CapabilityStacked-bar chartConditional formattingA real scheduler
Weekends and holidays excludedYes, via WORKDAYYes, via WORKDAYYes, built in
Single FS chain reschedulesYes, if Start is a formulaYes, if Start is a formulaYes
Visible dependency arrowsNoNoYes
Two predecessors on one taskOnly as a hidden MAX()Only as a hidden MAX()Yes
SS, FF and SF link typesNoNoYes
Lag on a link, labelledNo — a bare +5 in a formulaNo — a bare +5 in a formulaYes
Critical pathNoNoCalculated
Float / slack per taskNoNoCalculated
Resource levellingNoNoYes
Over-allocation warningNoNoYes
Baseline & varianceCopy the columns by handCopy the columns by handSaved and compared
Survives inserting a rowFormulas must be retypedMostlyYes
Survives sorting the rowsNo — references follow positionNoYes
Milestones as diamondsManual marker seriesManual ruleYes

That is a specific claim, not a dismissal: a stacked-bar chart is a drawing of a schedule you worked out somewhere else. For a dozen tasks running roughly in a line that is sufficient, and the spreadsheet is the right tool. But the middle rows of that table are exactly what you get asked in a status meeting, and the file cannot answer any of it.

A · 3B · 5C · 2D · 4Critical path: A → B → DSlack (C): 3Duration: 12
Only the longest path through the network sets the finish date — and only a scheduler can find it.

Free Excel template

If you just want a working file, start from our ready-made free Excel Gantt chart template. It already has the task table, the stacked-bar setup, reversed axis, and formatted dates in place — you drop in your tasks and dates and the chart updates. You can also browse the full template library for industry-specific plans like construction, marketing, and software.

The faster alternative — build online & export to Excel

The stacked-bar method works, but it is slow to set up and painful to change. If you want the Excel file without the busywork, build the chart in gantts.app first — free, no sign up, no download. You type tasks, drag bars and link dependencies, and it calculates the critical path automatically. Then export to Excel in one click (or PowerPoint, PDF, PNG). New to the format? Start with how to make a Gantt chart step by step.

Frequently asked questions

Does Excel have a built-in Gantt chart?

No. Excel has no native Gantt chart type. The standard method is to start from a stacked bar chart and hide the first series so the remaining bars line up like a Gantt chart. Excel also ships some Gantt project templates you can download.

How do I turn a stacked bar chart into a Gantt chart in Excel?

Chart the Start and Duration columns as a stacked bar, then select the Start series and set its fill to No Fill. The invisible Start segments push each Duration bar to its correct start date, producing a Gantt chart. Reverse the axis so task one sits at the top.

How do I add percent complete to an Excel Gantt chart?

Use three stacked series, not four. Add a Percent complete column, then two helpers: Done, equal to bar length × percent complete, and Remaining, equal to bar length × (1 − percent complete). Chart Start, Done and Remaining in that order and drop the plain duration series. Adding a progress series on top of duration is a common mistake — it makes every bar longer than the task really is.

Does an Excel Gantt chart update when a task slips?

Only if each task's Start is a formula pointing at the previous task's End, such as =WORKDAY(C2,1). Then a change ripples down a single chain. It will not handle a task with two predecessors, it cannot show start-to-start or finish-to-finish links, and the chart's axis bounds are fixed serial numbers — so a date that moves past the end of the project runs off the chart with no warning.

Why is my Excel Gantt chart in the wrong order?

By default Excel plots the first table row at the bottom of a bar chart. Select the vertical axis, open Format Axis, and tick Categories in reverse order so your tasks read top to bottom in the same order as your table.

Is there a faster alternative to building a Gantt chart in Excel?

Yes. gantts.app builds the chart for you free in your browser with no sign up, including dependencies and automatic critical path, and then exports to Excel, PowerPoint, PDF or PNG — so you get an Excel file without the manual stacked-bar setup.

Make your Gantt chart now

Free, no sign up. Build it online with dependencies and critical path, then export to Excel.

Open the Gantt maker →