Blog / Building a schedule

Excel Schedules: When They're Fine and When They're Not

A lot of construction work is scheduled in Excel, and a lot of it goes fine. A spreadsheet with colored cells for weeks is fast to build, everybody can open it, and nobody needs training. The trouble starts when the job gets complicated enough that dates need to move on their own when something slips, and the spreadsheet cannot do that. This post is a fair look at when Excel is the right tool, where it breaks, and how to tell which side of the line your job is on.

What an Excel schedule usually is

Most Excel schedules are one of two things:

  1. A colored-cell Gantt. Rows are activities, columns are weeks or days, and someone fills cells with color to show when work happens. Dates are typed or implied by which cells are colored.
  2. A date table. Columns for activity, start, finish, duration, maybe responsible party. Sometimes a conditional-format Gantt is driven from the dates. Sometimes finish dates are formulas like =WORKDAY(start, duration).

Both are static. When an activity slips, someone has to decide which other activities move, by how much, and change them by hand. That is the core difference from a CPM schedule, where logic relationships make the dates move automatically.

When Excel is fine

Excel is a reasonable tool when most of these are true:

  • The job is small. A few dozen activities, a few months, a handful of trades.
  • The sequence is simple and mostly linear. A tenant improvement where demo is followed by framing, rough-in, inspection, drywall, finishes, and punch.
  • One person maintains it, and that person knows the job. The logic lives in their head, and that is acceptable because they are there every day.
  • No one contractually requires a CPM schedule. Many small private jobs do not.
  • Nobody will need to prove what caused a delay. If a dispute is unlikely, the lack of auditable logic matters less.
  • You need a quick view for a specific purpose. A pre-bid sequence, a phasing study, a one-page summary for a meeting.

For these, a spreadsheet can be faster to build and easier to share than any scheduling software. That is a perfectly good reason to use it.

Where it breaks

Dates do not move on their own

This is the big one. Here is a small sequence for an office fit-out, using the 0-based convention (day 0 is the first workday, EF = ES + duration, and a finish-to-start successor starts on the predecessor's EF).

ID  Activity                Dur  Pred    ES   EF
A   Demo                     5   -        0    5
B   Framing                  8   A        5   13
C   MEP rough-in            10   B       13   23
D   Ceiling grid             4   B       13   17
E   In-wall/above-ceiling
    inspection               2   C, D    23   25
F   Drywall                  7   E       25   32
G   Finishes and punch      10   F       32   42

Activity D (ceiling grid, simplified here) can run alongside rough-in, and E waits for both. In Excel, if framing slips three days, you have to know to move C and D, then recompute E as the later of C and D, then move F and G. Every one of those is a manual step. On seven activities that is annoying. On 300 activities it does not get done reliably, and the spreadsheet becomes a picture of what someone hoped would happen.

You can build formulas that chain dates, like setting C's start to B's finish, and E's start to =MAX(C_finish, D_finish). For a small, stable network that works. But the formulas are hidden in cells, nobody else can see the logic, and adding a predecessor means editing a formula by hand. One copy-paste in the wrong place and a chain silently breaks.

No float, no critical path

Excel will not tell you which activities have float or which ones drive the finish. In the example above, D finishes at day 17 but E does not start until day 23, so D has 6 days of total float (LS of D = 23 − 4 = 19, ES = 13, float = 6). Every other activity is critical. In a spreadsheet you would have to calculate that by hand, every time something changes. Without float, you cannot tell whether a slip on a given activity matters. Total Float vs. Free Float: What Each One Tells You covers why that number is so useful.

No baseline comparison

You can save a copy of the spreadsheet each month and compare by eye, but there is no automatic baseline-to-current comparison. When the owner asks what slipped and why, you are flipping between files. That is fine on a small job. It is a real problem on a job where delays get argued about.

Weak for delay analysis

Delay analysis methods like Time Impact Analysis depend on inserting a fragnet into a logic-driven schedule and seeing how the dates move. A static spreadsheet has no logic to insert into. If your contract has a delay or extension-of-time process that expects a schedule-based analysis, a spreadsheet schedule puts you at a disadvantage. Time Impact Analysis, Step by Step shows what that process looks like. Contracts vary on what they require, so read yours and talk to counsel if a claim is likely.

Version sprawl

"Schedule_rev4_FINAL_JM_edits_v2.xlsx" is a known species. Without a single source, the superintendent's printout, the PM's file, and the owner's copy diverge within a month.

Signs it is time to move to CPM

You have probably outgrown the spreadsheet if:

  • The contract requires a CPM schedule, a critical path narrative, or schedule-based delay analysis.
  • Updating the schedule takes most of a day because every slip has to be chased by hand.
  • You have more than a few dozen activities with overlapping trades.
  • You cannot answer "what's driving the finish date?" without thinking about it for a while.
  • More than one person needs to edit it.
  • An owner or lender wants monthly updates compared to a baseline.
  • Multiple subs need their own views and you are making a separate copy for each.

Moving from Excel to CPM

If you decide to switch, the spreadsheet is still useful. It has the activity list, the durations, and usually the responsible parties. What it usually does not have, in a form a tool can read, is the logic.

A practical path:

  1. Clean up the activity list. One row per activity, unique IDs, consistent names. Split anything that has more than one responsible party.
  2. Add durations in workdays, not start and finish dates. The CPM engine will compute dates from durations and logic.
  3. Add a predecessor column. For each activity, list the IDs that have to finish first. Most will be simple finish-to-start. Note any overlaps or lags. FS, SS, FF, SF: Choosing the Right Relationship Type covers when to use something other than finish-to-start.
  4. Import, then check the logic. Look for activities with no predecessor or no successor. Those are open ends, and a spreadsheet conversion usually produces a lot of them.
  5. Compare the computed dates to the spreadsheet dates. Where they differ, either the logic is missing something or the spreadsheet dates were optimistic. Both are worth knowing.

schedule.construction imports Excel directly, along with P6 .xer and MS Project XML, so the cleaned-up spreadsheet can be the starting point, and you can draw or fix dependencies on the Gantt from there.

A middle ground

There is nothing wrong with keeping Excel in the toolbox after you switch. Plenty of teams run the master schedule in CPM and still use spreadsheets for things that are spreadsheet-shaped: submittal logs, procurement trackers, quick what-if sketches, or a one-page sequence for a pre-bid meeting. The rule of thumb is that the dates people make commitments against should come from one logic-driven source. Everything else can be whatever is fastest.

Key takeaways

  • Excel is fine for small, simple, single-owner schedules with no contractual CPM requirement.
  • The core limitation is that dates do not move on their own. Every slip must be chased by hand.
  • Without logic, Excel cannot show float, critical path, or support schedule-based delay analysis.
  • Move to CPM when the contract requires it, when updates take too long, or when you cannot say what drives the finish.
  • When converting, add a predecessor column and durations in workdays, then check for open ends after import.