Choose Fruit in one cell, and the next cell should offer Apple, Pear, and Plum. Choose Drinks, and it should offer Coffee and Tea instead. That's a dependent drop-down list: the first selection controls the choices in the second.
To make the lists dynamic, keep the source items in an Excel Table. In Microsoft 365 or Excel 2021 and later, you can use FILTER, UNIQUE, and SORT to build the choices in helper cells, then give those ranges names for Data Validation. The Table reference includes new source records, so you don't need to edit the helper formulas when you add an item.
The example below uses three independent Category/Item pairs. The older INDEX/MATCH method from the original tutorial follows afterward for workbooks without those dynamic-array functions. Excel 2019 and 2016 do not support the modern formulas shown here.
Download the dependent dropdown example workbook to follow along with the Source, Entry, and Lists sheets. It starts with the seven source records and three sample selections shown below; add Fruit/Mango to try the expanding list.
Set up the source Table and input cells
Create three worksheets named Source, Entry, and Lists. Put this data in Source!A1:B8, including the headings:
| Category | Item |
|---|---|
| Fruit | Apple |
| Fruit | Pear |
| Fruit | Plum |
| Drinks | Tea |
| Drinks | Coffee |
| Office | Notebook |
| Office | Pen |
Convert the range to an Excel Table with headers and name it tblItems. Each row holds one category/item pair. Fruit has three items; Drinks and Office have two each. There's no need to pad the shorter lists with blank records. If Tables are unfamiliar, the Table Design in Excel walkthrough explains the difference between a range that looks like a table and an actual Excel Table; its screenshots show the historical interface.
On Entry, put Category in B2 and Item in C2. We'll use B3:C5 for three rows of selections. Keep these as ordinary worksheet cells for this example.
The source Table and the cells people fill in have different jobs. As I noted in the original tutorial, I normally put the reference Table on a different worksheet. Here, Source holds the records, Entry holds the selections, and Lists keeps the helper formulas out of the way.
Build the category list in Microsoft 365 or Excel 2021+
The dropdown interactions and screenshots below were checked in Excel for Mac 16.114.
In Lists!G3, enter:
=SORT(UNIQUE(tblItems[Category]))FormulaUNIQUE takes one copy of each category, and SORT puts them in ascending order. You should see Drinks, Fruit, Office in G3:G5. The formula occupies G3; its results spill into the cells below.
Keep the helpers in ordinary cells outside any Table. Excel Tables hold the source records, but they cannot contain these spilling formulas. Microsoft's guide to spilled array behavior explains that distinction. Leave the cells below G3 empty so the list has room to grow.
Name the spill range
Create a defined name called CategoryOptions, with Workbook scope, that refers to:
=Lists!$G$3#FormulaThe # means the whole spill range beginning at G3. Don't name only the current three cells: the spill reference is what lets the name follow a longer or shorter list.
Use the naming controls on Excel's Formulas tab. In Windows, Define Name opens the dialog where you enter the name, choose Workbook for Scope, and enter the reference in Refers to. Microsoft documents these fields in Names in formulas. In the Mac version used here, open Formulas > Define Name to create the name and enter its reference.
Apply the category validation to all three rows
Select Entry!B3:B5, open Data > Data Validation, and choose List under Allow. Use this Source:
=CategoryOptionsFormulaKeep In-cell dropdown enabled, then confirm the rule. Each selected cell should offer Drinks, Fruit, and Office. For a closer look at the dialog, see how to create a drop-down list with Data Validation.
Build a separate item list for each input row
First choose Fruit in Entry!B3. In Lists!H3, enter:
=SORT(UNIQUE(FILTER(tblItems[Item],(tblItems[Category]=Entry!$B$3)*(tblItems[Item]<>""),"")))FormulaFILTER keeps items whose category matches B3 and whose item text isn't blank. The * joins those two conditions: both must be true. UNIQUE removes repeated items within that category, and SORT orders the result. With Fruit selected, H3:H5 should contain Apple, Pear, Plum.
The final "" is FILTER's result when nothing matches. With this source data, leaving the parent category blank produces blank text in the helper cell. It does not create a spill range with zero cells. Choose the category first, then use its item list.
For the next input row, put this formula in Lists!J3:
=SORT(UNIQUE(FILTER(tblItems[Item],(tblItems[Category]=Entry!$B$4)*(tblItems[Item]<>""),"")))FormulaFor the third row, put this formula in Lists!L3:
=SORT(UNIQUE(FILTER(tblItems[Item],(tblItems[Category]=Entry!$B$5)*(tblItems[Item]<>""),"")))FormulaNotice that the helpers start in different columns, H, J, and L. Don't put them in H3, H4, and H5: the first list would run into the next formula as it spilled downward. Keep the area below each helper clear.
Connect each item cell to its own list
Create these three workbook-scoped names:
| Name | Refers to | Parent selection |
|---|---|---|
| ItemOptions3 | =Lists!$H$3# | Entry!B3 |
| ItemOptions4 | =Lists!$J$3# | Entry!B4 |
| ItemOptions5 | =Lists!$L$3# | Entry!B5 |
Now apply List validation to each item cell separately, using the matching name in Source:
| Item cell | Data Validation Source |
|---|---|
| Entry!C3 | =ItemOptions3 |
| Entry!C4 | =ItemOptions4 |
| Entry!C5 | =ItemOptions5 |
The validation rule points to a named range of cells. The longer FILTER formula belongs in the helper cell, not in the Data Validation Source box.

Choose Fruit in B3, Drinks in B4, and Office in B5. Open each adjacent item dropdown and check its choices:
| Category | Item choices, in order |
|---|---|
| Fruit | Apple, Pear, Plum |
| Drinks | Coffee, Tea |
| Office | Notebook, Pen |
The shorter lists should have two choices, without an extra blank row to match Fruit's length. Changing B4 should change C4's available choices while leaving the other rows' lists alone.

Add an item and check the actual dropdown
Add a new record at the bottom of tblItems: Fruit in Category and Mango in Item. Confirm that the Table includes the new row. With Fruit still selected in B3, the helper in H3 should now show Apple, Mango, Pear, Plum.
If the helper or dropdown still shows the old choices after adding an item or changing a category, use Excel's Calculate Now command, then reopen the dropdown. This is necessary when calculation is set to Manual.
Then open the dropdown in C3 and select Mango. Checking the formula result alone isn't enough; the validation rule must also refer to the expanding spill. The Drinks row should still offer only Coffee and Tea. Microsoft likewise recommends testing the resulting rule in its Data Validation instructions.

Adding source records and adding input rows are separate tasks. To add another Category/Item pair on Entry, give its category cell the =CategoryOptions rule, create another helper in a clear column, and define a name for that spill. Apply that name to the new item cell. Converting the input area to a Table does not create this row-specific helper setup for you.
When the category changes, clear the old item
Here's the catch: changing the available choices does not automatically clear a value already stored in the item cell.
Choose Fruit in B3 and Apple in C3, then change B3 to Office. The item dropdown should now offer Notebook and Pen, but Apple can remain in C3. The helper has recalculated; the stored selection hasn't been replaced.

After changing a category, clear its item cell and select an item from the new list. Do the same if you delete or rename a selected item in the source Table. This setup updates the choices; it doesn't include a macro or other mechanism to erase old selections.
The legacy INDEX/MATCH method for older Excel
The original tutorial used Tables and defined names in Excel 2007/2010 for Windows and Excel 2011 for Mac. This section preserves that approach for workbooks without FILTER, UNIQUE, and SORT. Those historical versions are the context of the original instructions, rather than a claim that they have been retested for this refresh.
Use this as an alternative source layout, not an extra step in the modern setup. Create a Table named Table1 with the category names across the header row and their items underneath:
| Fruit | Drinks | Office |
|---|---|---|
| Apple | Tea | Notebook |
| Pear | Coffee | Pen |
| Plum |
Keep each list at the top of its column, with at least one item per category. Empty cells may follow the last item, but there must be no gaps within a list. Unlike the modern example, this method keeps the source order and does not remove duplicates.
Define the category and item references
Create the workbook-scoped name myCategory referring to:
=Table1[#Headers]FormulaFor a single Category/Item pair in Entry!B3:C3, set B3's List validation Source to =myCategory. Choose a category before setting up the dependent list.
Create another workbook-scoped name, myItemList, referring to:
=INDEX(Table1,0,MATCH(Entry!$B$3,Table1[#Headers],0))FormulaMATCH finds B3's category in the headers using an exact match. INDEX then returns the corresponding Table column; the zero row argument requests the whole data column.
That reference includes every data row in the Table. For Fruit, all three cells contain items. For Drinks and Office, the third cell is blank. Using =myItemList directly as the validation source therefore leaves blanks in the shorter dropdowns. As the original example showed, that isn't an elegant list.
Create myItem, the final workbook-scoped name:
=OFFSET(myItemList,0,0,COUNTA(myItemList),1)FormulaCOUNTA counts the occupied cells in the selected column. OFFSET uses that count as the height of a one-column reference, starting at the top of the item list. Set Entry!C3 to List validation with Source =myItem.
These references deliberately fix the parent at B3. For another input row, create corresponding item names that refer to that row's parent and apply the matching validation source. Copying this fixed reference to another row would still make its choices depend on B3.
The blank-cell limitation matters
OFFSET is volatile, so extensive use can add recalculation work. The more immediate problem here is that COUNTA gives a count, not the position of the last item.
Suppose Fruit contains Apple, a blank cell, and Plum. COUNTA returns 2, so the formula takes the first two cells: Apple and the blank. Plum is left out. Formulas returning "" are another complication because COUNTA counts those cells even though they look empty.
Keep these legacy lists contiguous and use genuinely empty cells below them. If gaps cannot be removed, =myItemList includes the full column and avoids truncating later items, but the dropdown will include the gaps. It doesn't solve the blank-entry problem.
The non-OFFSET list tutorial shows how INDEX can return a whole Table column for a growing list; that alternative also includes blanks in the referenced column. If your existing source stores each category's items across a row, see the separate horizontal-reference example, which uses a different source arrangement.