Dependent Dropdown Lists in Excel (Two Methods That Actually Work)

Dependent Dropdown Lists in Excel (Two Methods That Actually Work)

📎 This article includes 1 downloadable practice file ↓

⏱ 2 min readUpdated 27 September 2026

A dependent (cascading) dropdown shows only the options that make sense: choose Category = Displays and the second list offers only monitors. It prevents typing errors and makes forms feel professional.

In this article
  1. The data
  2. Method 1: FILTER spill range (Microsoft 365 / Excel 2021+)
  3. Method 2: INDIRECT with named ranges (every version)
  4. Clear the second choice when the first changes
  5. Which method?

The data

Category Product
Accessories Keyboard
Accessories Mouse
Displays Monitor 24″
Displays Monitor 27″
Video Webcam HD

Method 1: FILTER spill range (Microsoft 365 / Excel 2021+)

  1. Put the list above in a table on a sheet called Lists (columns A:B).
  2. First dropdown in Form!B2: Data Validation → List → Source =UNIQUE(Lists!$A$2:$A$100) won’t work directly, so put =SORT(UNIQUE(Lists!A2:A100)) in Lists!D2 and use Source =Lists!$D$2#.
  3. In Lists!E2 enter =FILTER(Lists!B2:B100, Lists!A2:A100=Form!B2, "—"). It spills the matching products.
  4. Second dropdown in Form!C2: Data Validation → List → Source =Lists!$E$2#.

The # after a cell refers to its whole spill range, so the list grows and shrinks automatically when you add products.

💡 This method works for one form row. For a whole column of rows, use Method 2 or a small VBA change event.

Method 2: INDIRECT with named ranges (every version)

  1. Put each category’s products in its own column with the category as header: Accessories, Displays, Video.
  2. Select the whole block → Formulas → Create from Selection → Top row. Excel creates a name for each column.
  3. First dropdown (B2): List → Source = the header row.
  4. Second dropdown (C2): List → Source =INDIRECT(B2). Copy it down the column.
⚠️ Names cannot contain spaces. For a category like “Office Chairs”, Excel creates the name Office_Chairs, so use =INDIRECT(SUBSTITUTE(B2," ","_")).

Clear the second choice when the first changes

Changing Category leaves an old, invalid Product behind. A short sheet macro fixes it (right-click the sheet tab → View Code):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("B2:B500")) Is Nothing Then
        Application.EnableEvents = False
        Target.Offset(0, 1).ClearContents
        Application.EnableEvents = True
    End If
End Sub

Which method?

FILTER spill INDIRECT + names
Excel version 365 / 2021+ All
Adding items Automatic Update the named range
Many form rows One row per helper Works for every row

📎 Practice files for this article

  • 📗
    Working category u2192 product formINDIRECT + named ranges method, ready for 50 order rows.
    ⬇ XLSX · 7 KB

Free to use for learning. Files with macros (.bas) are plain text — import them with Alt+F11 → File → Import File, and always test on a copy.