I started using spreadsheets back in 1985, in the days of Lotus 123. At the time, I was developing reliability prediction models used in design tradeoff decisions for systems being developed for the US Army Corps of Engineers (that little reverse osmosis water purification do-dad under the counter at Starbucks is pretty straightforward technology, but when scaled to produce tens of thousands of gallons per day, using surface water and generator power, things can get complicated). I moved to Excel a few years later when I adopted Windows 3.1 but after more than three decades, I still manage to find new ways to capture and manipulate data. Let me share a few Excel functions that you probably aren’t using.
Calculating the Number of Working Days
It’s easy to calculate the difference in days, weeks, months, or years between two dates, but I often need to calculate working days.
NetWorkDays(Start_Date, End_Date,[Optional_Holidays])
This function calculates the difference between the two dates but ignores Saturdays, Sundays, and whatever holidays you pass it in a list. You can pass this example list either directly as B2:B9 or by defining a name for that range (highlight the range, right click, Define Name) and passing the name. We’ll use this list as an example:
Holiday |
Celebrated |
Martin Luther King’s Birthday (US) |
1/16/2017 |
President’s Day (US) |
2/20/2017 |
Memorial Day (US) |
5/29/2017 |
Independence Day (US) |
7/4/2017 |
Labor Day (US and Canada) |
9/4/2017 |
Thanksgiving Day (US) |
11/23/2017 |
Day after Thanksgiving (US) |
11/24/2017 |
Christmas Day |
12/25/2017 |
Let’s say I want to include the number of working days until some event in a status report. The effective date of the status report is in a named cell (done the same way you named the range of holidays) and so is the event date. Like so:
=NETWORKDAYS(Status_Date,Go_Live,Holidays)
This will return the integer number of working days, which you can then use directly or in another calculation. I typically include the holidays for the project in a separate tab. But let’s say you crashed the schedule and decided you needed the team to work a few weekends, especially at go live. So create a list of Working Weekend Days, name the range, and add it to the calculation.
Working Weekend Days |
Worked |
Conversion Sunday |
1/8/2017 |
Cutover Saturday |
6/10/2017 |
Cutover Sunday |
6/11/2017 |
Now we can incorporate those weekend working days into the formula:
=NETWORKDAYS(Status_Date,Go_Live,Holidays) +COUNTIF(Weekend_Work,">"&Status_Date)
In this example, the CountIf function picks up the two days in the list greater than the status date of January 9, which is then added to the 108 days from the NetWorkDays function result:
Status Date |
1/9/2017 |
Go Live |
6/12/2017 |
Working days to Go Live |
110 |
The Working days remaining equals the number of weekdays between the two dates, minus the three holidays that fall in the range, plus the two weekend dates greater than the status date. Note that if your weekend days are something other than Saturday and Sunday, the NetWorkDays.Intl function allows you to specify alternatives.
Summarizing Data in a Table
While we’re talking about status reports: it helps to summarize the information in your risk register, even at a high level. Take a look at this sample, which includes the results of a qualitative risk analysis.
Risk ID |
Risk description |
Last likely date of occuring |
Probability |
Impact |
Calculated risk |
1 |
This risk |
1/1/2017 |
Medium |
Medium |
3.0 |
2 |
That risk |
1/23/2017 |
Low |
Medium |
2.4 |
3 |
The other |
4/1/2017 |
High |
Medium |
3.5 |
4 |
One more |
2/1/2017 |
Low |
Large |
2.8 |
5 |
And another |
7/1/2017 |
Very low |
Medium |
1.7 |
The Calculated risk field is based on a formula:
=SQRT(VLOOKUP(D2,RiskProbValue,2,FALSE) *VLOOKUP(E2,RiskImpValue,2,FALSE))
Note that two lookup tables were defined to associate numeric values with the Probability and Impact scores; the risk is calculated as the square root of the product of the two numeric values. So let’s say you want to tally up the number of risks with High or Medium scores that are still likely to occur. On the status report, it looks like this:
High Risks |
1 |
Medium Risks |
2 |
We can use the CountIfs function to tally the risks for each criterion. For High risks, e.g. those with a Calculated risk value of 3.0 or more, and a Last likely date after the status date:
=COUNTIFS(Calculated_risk, ">="&3, Last_Date,">"&Status_Date)
For the Medium count, we’ll use a range of values:
=COUNTIFS(Calculated_risk, ">="&2, Calculated_risk, "<"&3, Last_Date,">"&Status_Date)
Getting a Completion Date
Sometimes I need to pencil out a very high-level timeline to determine if a goal is even achievable by some date. So I’ll create a list of tasks, each with a proposed duration, and start date. The assumption is that each task begins the day after the predecessor completes. I can then use the WorkDay function:
WorkDay(Start_Date, Duration,[Optional_Holidays])
This returns the serial number of the date Duration days after Start_Date. I can convert it for display using the Text function, like so:
=TEXT(WORKDAY(B7,C7,Holidays),"m/d/yyy")
I can also convert the date to the day of the week, again using the Text function:
=TEXT(WORKDAY(B11,C11,Holidays),"dddd")
This lets me specify a State Date for the first task and durations for each task in the list, with the subsequent start dates and completion date calculated automatically.
Task |
Start Date |
Duration |
Plan |
1/5/2017 |
5 |
Analyze |
1/12/2017 |
25 |
Build |
2/17/2017 |
15 |
Test |
3/13/2017 |
26 |
Cutover |
4/18/2017 |
3 |
Complete on |
4/21/2017 |
Friday |
Of course, the danger in this approach is that by tweaking the start date or individual durations, you can convince yourself that something is achievable simply by giving yourself less time to do it. So, don’t do that.
The ability to create reusable spreadsheets that use Excel functions to provide actionable information from raw data is still one of those skills that will pay big dividends over the course of a career in project management. All you really need is a little imagination and an understanding of what the data actually represents.