Dynamic dropdowns are a handy way to get your users to make choices based on what they’ve previously chosen, while steering them away from making invalid choices. Today we’re going to look at one that easily handles multiple levels, and we’ll take a look at what could go wrong. Let’s see one in action, shall we?
Right, what’s on the (dropdown) menu?

*BING!*

Cool…check it out…as you can see from the above, the user gets prompted with “Choose…” whenever a subsequent choice must be made.
Ok, what kind of fruit should I have? Hmmm, let me see….eeny, meeny, miny, STRAWBERRIES!!!…MO!

Ok, so what delights does Sub Category 2 have in store for me?

Earliglow? Never heard of it. Sounds delicious…I’ll have those, please.
There, all done. Pretty nifty eh…users only get to see valid choices depending on what they chose last. So users simply can’t screw up! Or can they?
[Evil user, determined to prove me wrong]: Wait a minute…I just remembered that mother expects me to eat my vegetables first, before I move on to dessert. So I better change that initial selection:
*BING!*

What the…Strawberries are vegetables???
Damn…changing upstream dropdowns later on means those downstream choices can be flat out wrong! So how can we make this bulletproof?
Macros to the rescue
Yep, we’ll use some code to clear out any ‘downstream’ choices if anything ‘upstream’ changes. Let’s go back to that original strawberry fest:

Now watch what happens when our user subsequently decides they better vege out first:
Ahh…look at that: the code realized that all those downstream choices are no longer valid. So it deleted them, and prompted the user to choose again. There. Now that IS bulletproof.
So let’s see…hmmm…for an appetizer, I’ll have baby carrots:

And I already decided on Strawberries for pudding…

But what about my main course. Ah, yes, of course…

MEAT! Yummy. BURP!
What’s the recipe?
My approach draws on Roger Govier’s excellent sample file on the Contextures website. Be sure to check out that link to see Roger’s in-depth discussion of the formula magic behind this puppy…It’s genius.
In my Dynamic-Dependent-dropdowns-20140214, you’ll see that all the different categories used by the dropdowns are hosted in an Excel Table, that has the initial categories down the left hand side, and subsequent categories across the top:

So how do these categories get used by the data validation dropdowns? Roger’s approach uses two dynamic named ranges to feed the data validation lists, one called MainList and one called SubList:

Here’s the MainList formula:
=INDEX(Table1[[Choose…]],1):INDEX(Table1[[Choose…]],COUNTA(Table1[[Choose…]]))
…and here’s the SubList formula:
=IF(OR(Sheet1!B8="Choose…",Sheet1!B8=""),"",INDEX(Table1,1,MATCH(Sheet1!B8,Table1[#Headers],0)):INDEX(
Table1,COUNTA(INDEX(Table1,,MATCH(Sheet1!B8,Table1[#Headers],0))),MATCH(Sheet1!B8,Table1[#Headers],0)))
The SubList formula has a relative reference in it: whatever cell you use it in, it retrieves the value of the cell to the immediate left, and then it scans the column headers of our validations table (Table1) looking for the heading that matches that value. Once it’s found it, it simply uses the items listed underneath that heading.
Because this formula is relative, before you enter it into the Name Manager, you will need to first select cell C8, because the above relative formula refers to B8 – the cell to the left. (Note that it doesn’t matter what is in C8 or where your actual dropdown are…rather it’s just that the above formula happens to refer to B8, and because we want our formula to always reference the cell on the immediate left, then we’ve got to select the cell to the immediate right before we enter this relative formula into the Name Manager.
Also note that my version of Roger’s approach uses Excel Tables and the associated Structured References that Table functionality allows. My table is called Table1. Your validation lists MUST be held within an Excel Table (which requires Excel 2007 or greater) and you MUST change the Table1 references in the above formula to match the name of your table.
Excel Tables – known as ListObjects to VBA developers – were introduced in Excel 2007, and are a very powerful and simple way to store things like lists, chart data, and PivotTable data…especially if you might need to add more data to your spreadsheet at a later date, and want to avoid having to repoint all your formulas to include the additional data. If you’re not familiar with Excel Tables – or you don’t know what that Table1[#Headers] guff above means – then I strongly suggest you check out Chandoo’s Introduction to Structural References and this great video he did with MrExcel.
The way these two formulas work is very clever. That MainList named range only gets used by dropdowns in that very first ‘Main Category’ column:

…and all other ‘downstream’ dropdowns – no matter what level they are – are fed by the SubList named range:

The beauty of Roger’s approach is that it can handle any number of cascading levels, provided all the category names are unique. All you need to do is simply add the new subcategories to the right hand side of our validations table (Table1).
Let’s look at an example. If you look at the below screenshot, you’ll see that users can choose from a number of different kinds of meat:

Let’s add a further level that would give meat eaters some further choices relating to how their meat is prepared.
To set this up, all we need to do is take the individual items from that ‘Meat’ column and add each one as a new column header:

Then we simply list the new options for each type of meat below the relevant header:

Now here’s the magic: as soon as we add another column to our input table and set it up with data validation – which I did simply by clicking on the bottom right corner of the cell with the word ‘Human’ and dragging it across – then Excel picks up on the fact that there’s a sub-subcategory, and serves it up to us. *BING!* Order up!

Add code, and stir-fry for 10 milliseconds
As mentioned earlier, in addition to Roger’s great method, I’ve written some code that clears out any downstream entries in the event that an upstream entry is changed. It’s in the sample workbook already, all set to go. But here’s the actual code, for you VBA nerds. (Special thanks to Gabor Madacs for some enhancement suggestions)
Option Explicit
Const CHOOSE = "Choose…"
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
Dim targetCell As Range
Dim nextCell As Range
Dim oldCalc As Excel.XlCalculation
If Not Intersect(Target, [DataEntryTable]) Is Nothing Then
If [Radio_Choice] = 1 Then
With Application
.EnableEvents = False
.ScreenUpdating = False
oldCalc = .Calculation
.Calculation = xlCalculationManual
End With
For Each targetCell In Target
'Clear any cells that use 'SubList' to the right of targetCell in the current table.
If targetCell.Column < (targetCell.ListObject.ListColumns.Count + targetCell.ListObject.Range.Column - 1) Then 'there are table cells to the right
For Each nextCell In targetCell.Offset(, 1).Resize(, targetCell.ListObject.ListColumns.Count + targetCell.ListObject.Range.Column - targetCell.Column - 1)
If HasValidationFormula(nextCell) Then
If nextCell.Validation.Formula1 = "=SubList" Then nextCell.Value = ""
End If
Next nextCell
End If
'Perform different action depeding on whether we're dealing with a 'MainList' dropdown
' or a 'SubList' dropdown
If HasValidationFormula(targetCell) Then
Select Case targetCell.Validation.Formula1
Case "=MainList"
If targetCell.Value = "" Then
targetCell.Value = CHOOSE
ElseIf targetCell.Value = CHOOSE Then
'Do nothing.
Else
targetCell.Offset(, 1).Value = CHOOSE
End If
Case "=SubList"
If targetCell.Value = "" Then
targetCell.Value = CHOOSE
ElseIf targetCell.Offset(, -1).Value = CHOOSE Then
targetCell.Value = ""
ElseIf targetCell.Value = CHOOSE Then
'Do nothing
Else
Set nextCell = targetCell.Offset(, 1)
If HasValidationFormula(nextCell) Then
If nextCell.Validation.Formula1 = "=SubList" Then nextCell.Value = CHOOSE
End If
End If
End Select
End If
Next targetCell
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = oldCalc
End With
End If
End If
Exit Sub
ErrorHandler:
With Application
.EnableEvents = True
.ScreenUpdating = True
If oldCalc <> 0 Then .Calculation = oldCalc
End With
MsgBox Err.Description, vbCritical, Name & ".Worksheet_Change()"
End Sub
Private Function HasValidationFormula(cell As Range) As Boolean
On Error GoTo ValidationNotExistsError
If cell.Validation.Formula1 <> "" Then
HasValidationFormula = True
Else
HasValidationFormula = False
End If
Exit Function
ValidationNotExistsError:
HasValidationFormula = False
End Function
Hungry for more?
Here’s some related Posts at Chandoo.org:
Download the file
To see how this is done, download this file and enable macros:
Dynamic-Dependent-dropdowns-20140214
About the Author.
Jeff Weir – a local of Galactic North up there in Windy Wellington, New Zealand – is more volatile than INDIRECT and more random than RAND. In fact, his state of mind can be pretty much summed up by this:
=NOT(EVEN(PROPER(OR(RIGHT(TODAY())))))
That’s right, pure #VALUE!
Find out more at http:www.heavydutydecisions.co.nz


















49 Responses to “Project Management Dashboard / Project Status Report using Excel [Part 6 of 6]”
[...] display milestones Part 4: Time sheets and Resource management Issue Trackers & Risk Management Project Status Reporting – Dashboard Bonus Post: Using Burn Down Charts to Understand Project [...]
Excellent!
I was looking forward to this and you've done it again...Shame I can't claim it was all my own work 😉
ps hope you're getting enough sleep
Excelent !!! Tks to share your knowledge with us.
Izabel
Sao Paulo - Brazil
Nice job!.
I'm also keen on PM Excel Dashboards. Please, take a look at
http://screencast.com/t/TyaxH5r4mDf
That's one example of my Project control Spreadsheets.
Cheers
Hi Miguel,
Do you share your PM Excel Dashboards? It looks awesome.
Regards,
Germán
Hi M. Miguel,
Can you share your Excel Dashboards? Awesome work BTW.
Regards,
Michel Levesque
Can you share the PM excel template?
[...] haired Dilbert hat zum Abschluss einer Artikeserie zum Thema Projektmanagement mit Excel eine Anleitung zum Bau eines Projekt-Dashboards veröffentlicht. Ein Dashboard ist eine Visualisierungsform für große Mengen von meist [...]
Quite a nice and helpful article. I am sure excel is one of the most used application across many many big companies. And your info on project status update using excel would surely be usefull. Keep up the good work on this blog site. Also to share there are some open source flash-based graphing and charting solution which caould also be used on any project..
http://askwiki.blogspot.com/2009/07/how-to-create-quality-charts-using.html
@Alex, Izabel .. thank you 🙂
@Miguel: Thank you. Your dashboard looks very good. It is inclined towards the budget and finances of the project. I have kept those aspects out of this series. May be I will revisit the financial aspect of projects at a later point.
@Rishil: Thank you. Yes, you can create flash based charts (or even simple image based charts) and embed them in a project dashboard that can be published to the team using intranet (like sharepoint). This is how large companies usually do it. Thanks for sharing the Askwiki article.
Great looking dashboard!! Do you have a version for the Mac versions of Office available?
Thanks
Chandoo,
this is great piece of collating info.I liked it and shall try using it in office.
Thanks for the all hard work behind this.
Chandoo,
Kudos. This is really as simple as it gets for laymen. We did this sort of stuff in Consulting - but this can now become really simple for people. Will have my team look at this! Great work.
thanks,
Mrigank
[...] I suggest reading my 7 part series on project management using excel. Starting with Excel Gantt Charts to Project Dashboards. [...]
Just downloaded the project management template bundle...great!
Have you done anywork on a Project Portfolio Dashboard template?
@Bw... Thanks for getting a copy of the templates. 🙂 I have worked on few assignments where we built such templates. But these are similar to other regular dashboard templates. I will share some of these ideas in a later post someday. Meanwhile if you have any ideas on how to structure project portfolio dashboard, let me know using comments or email.
[...] to display milestones Time sheets and Resource management Issue Trackers & Risk Management Project Status Reporting – Dashboard Bonus Post: Using Burn Down Charts to Understand Project [...]
[...] display milestones Time sheets and Resource management Part 5: Issue Trackers & Risk Management Project Status Reporting – Dashboard Bonus Post: Using Burn Down Charts to Understand Project [...]
[...] to display milestones Time sheets and Resource management Issue Trackers & Risk Management Project Status Reporting – Dashboard Bonus Post: Using Burn Down Charts to Understand Project [...]
Thanks fro the great ideas! To get a sense of the layout and design of a Dashboard more geared toward Cost and Schedule anaysis, check out the example Dashboard at http://www.ProjectDashboards.com which was built entirely in excel.
hey,
i just need a simple Chart where by i can show some of the projects by % wise. no dates required.
1st column Project name and 2nd column will be status (filled with %). can you pls help me out.
Thanks.
@DS... if you have excel 2007, you can use data bars in conditional formatting for this purpose.
Hi Chandoo - this series is an excellent resource and tutorial, thank you for sharing.
When I sat down to consider what my dashboard should look like, one of the most important features for me is to be able to maintain version control and to show simply on what version is on display.
Apart from the naming convention of the file name, is there a good way to do this within a dashboard? I'd be interested to hear your thoughts!
@Larph: Welcome 🙂
> You can do version control thru Macros (but always remember that your audience can disable macros)
> Another option is to use a static time stamp / version number in the title page of dashboard that you update manually whenever you make changes to the file
> In excel 2010, you can keep track of file versions from File menu. This can be used to select a previous version of dashboard.
> Best option is to use a version control system like SVN or upload files to Sharepoint or something like that. This will take care of versioning for you (although it is a bit technical and dashboard audience may have difficulty figuring the versions out).
> The easiest option is to use filenames and the CELL() formula to get the version number (or date) from the filename so you can show it on the dashboard.
Hi Chandoo... I'm following you from Brazil...
I would like to thank you for the tips about excel, mainly with dashboards ... It helped me a lot …
Take care...
Di
On the dashboard when I print, the text is blanked out in the middle of the Issues list - suggestions on how to fix?
[...] Project Management Dashboard in Excel [...]
Hi Chandoo, do you have an equivalent Project Management Dashboard / Project Status Report for MS Office 2010?
As a Microsoft trainer I'm interested in your choice of Excel for project management. I'm assuming that you've tried Microsoft Project and have decided not to use it? We get folks on our MS Project courses who've tried to use Excel for PM purposes and none of them have made such an impressive project plan, but I wonder is it worth all the effort?
This looks very interesting. How may I be a part of this
Does this template work in Google Spreadsheets?
Many thanks for sharing your expertise with us. Keep up the good work 🙂
Heya i'm for the first time here. I came across this board and I to find It really helpful & it helped me out a lot. I am hoping to offer one thing again and aid others like you helped me.
Hi Chandoo,
Your PM dashboards impressed me so much that I've downloaded the Portfolio and Project Management package. All of the documents look very professional.
I was going through the Portfolio dashboard and I had a question.
When I enter in additional holidays they are highlighted in the gantt chart. Is it possible so that the name of the holiday shows up in the highlighted area of the gantt chart.
Thanks
Adam
[...] Project Status Dashboard [...]
[...] Project Status Dashboard in Excel [...]
[...] Project Management Dashboard in Excel [...]
can you confirm that the downloads will work on a mac - excel for mac v14.3.6
thanks
Made a slight variation on the schedule sheet,
1. Add a date column for start
2. In week column cell use =weeknum() and link to date cell
3. Hide week column
When you enter in a date for each task the week number is populated accordingly
simple but more effective, you can also dynamically link the date cell to your MSP project file for even more automation!!
I purchased a copy of the project management dashboard excel file. I misplaced the password to unlock the file and make modification. Can you please resend the password.
Thank much in advance...
Hi there! I just would like to give you a big thumbs up for your great info
you've got right here on this post. I'll be returning to your website
for more soon.
I bought ur project management template just want to know how to hide the budget section from portfolio?
Hi, Thanks - very good job you've prepared!
You've inspired me as well 🙂
Best regards
Hello!
I am using a gantt chart template which i got from your website. All is good just when I add all my acitivities in data spreadsheet and then go back to gantt chart to view them, I only see first 9 and then I need to keep scrolling for the next ones. is it possible to see most of the activities if not all in the single frame.
thanks for answering!
This is my first time pay a visit at here and i am actually happy to read all at alone place.
I am interested in your dashboard; downloaded the locked version, unable to use it...do you have a user guide that is available that I can see and use on the locked version?
Please send me daily newsletter
Hi,
I downloaded the PM dashboard and the gantt chart only has dates till the year 2016. How do I change this to include 2017 FY as well.
When I enter a activity for this year , it fails to show up on the chart.
Hi
Would.like to purchase the project management .kits
Pls share the payment link in INR
Also share your contact number to speak with you
Regards
Hari
9384825926