Friday, February 21, 2014

Data Validation - Cascading Lists (Using CHOOSE function)


Hola! Bienvenido! That’s hello and welcome in Spanish (J)

Coming to the point, we have seen how to build cascading lists using IF function and INDIRECT function. There are couple of more ways you can do the same, so I thought to put it here. Let’s see one of those ways in this post. I will set the basic backdrop using our example in earlier posts.

We have country, region and state to be selected from the drop down lists and we wanted these lists to be cascading / dependent on previous option selected.


In the same sheet, from A6 and onwards I have the countries, regions and states list. Let’s arrange them as in the table shown below. We are going to give numbers for each country and region list. For example: For India, I gave number 1 and USA got 2. Same way I gave numbers to regions list. You need not number State List. We will have to number this way until last but one layer. We will see how these numbers will be used going forward. Your data will look like below once done.



Select the first list values and give a name of your choice. In my example above, I select A7:A8 and name it as CountryList (Refer this post on how to give names to ranges)

From the second list, select those options relating to first item in first list and name it. In above example, I will select A12:A15 (regions relating to first item in first list i.e. India) and name it as India.

From the second list, select those options relating to second item in first list and name it. In above example, I will select A16:A19 (regions relating to second item in first list i.e. USA) and name it as USA.

You will continue doing this until all items in second list are named respectively. Once this is done, we will move on to third list items.

From the third list, select those options relating to first item in second list and name it. In above example, I will select D7:D8 (regions relating to first item in second list i.e. South India) and name it as SouthIndia.

From the third list, select those options relating to second item in second list and name it using exact wordings as the second item in second list. In above example, I will select D9:D10 (regions relating to first item in second list i.e. North India) and name it as NorthIndia.

Go on and name all other items following logic above. Once we are done naming all the items in third list, our list of named ranges should look like below. (I didn't name USA related items yet, but you have to in your real life example)



Alright, we are done arranging our data. Let's move on to apply validation in the cells.

In cell B1, apply validation as you normally do. That means, you will select List in Data Validation dialogue box Settings tab Allow: field. In the Source, type =CountryList

In cell B2, you will select List in Data Validation dialogue box Settings tab Allow: field. In the Source field, type the below formula!
=CHOOSE(VLOOKUP($B$1,$A$7:$B$8,2,0),India,USA)
In cell B3, you will select List in Data Validation dialogue box Settings tab Allow: field. In the Source field, type the below formula!

=CHOOSE(VLOOKUP($B$2,$A$12:$B$19,2,0),SouthIndia,NorthIndia,EastIndia,WestIndia)

Go ahead and check the drop-down lists. Are they working like cascading lists?





Let’s see what our functions are doing in cell B2.

VLOOKUP function looks for value of B1 in table A7:B8 and returns a number from 2nd column (that is where we gave numbers). Result of this is 1 if you select India in B1 and 2 if you select USA. CHOOSE function will select named ranges India or USA based on the VLOOKUP result. Named Range India will be selected if VLOOKUP result is 1 and Name USA is selected if VLOOKUP result is 2. Same logic for other lists as well.

You can download workbook I used for this example by clicking here.

There is one more way we can get the cascading lists i.e. using INDEX function. I will write about that in next post. Stay tuned!