Function Problems

How to Create Dynamic Dependent Lists with Excel FILTER

Muhammad TalhaMuhammad Talha Nov 11, 2026 869 views

Question details

The user needs to create a dynamic dependent list returning matching subcategories for category headers across columns.

How to Create Dynamic Dependent Lists with Excel FILTER
Product
Excel
Device & OS
not provided
Scenario
Setting up a data validation dropdown list that updates dynamically based on the category selected in a header cell.
Observed behavior
The FILTER function may return an error if the category reference does not perfectly align with the table data or if Data Validation restricts spilled arrays.
Before you start

Ensure your source data is formatted as an official Excel Table (Insert > Table) named 'StdCategories', and verify that your category headers exactly match the data entries without leading or trailing spaces.

Solution 1Recommended

Use SORT and FILTER for Dynamic Lists

Apply the FILTER function to extract subcategories based on a specific category header, wrapping it in SORT for alphabetical ordering.

This method extracts a clean, alphabetized list of subcategories that dynamically updates if the source table changes. It is the most robust way to handle dynamic arrays for dependent dropdowns.

1
Select the target cell

Select the first cell where you want the dependent list array to spill (e.g., cell E2).

2
Enter the FILTER formula

Type the formula `=SORT(FILTER(StdCategories[Subcategory],StdCategories[Category]=E$2,"None"))` into the formula bar.

3
Execute the formula

Press Enter. The matching subcategories will spill down the column automatically.

4
Fill across columns

Drag the fill handle to the right to apply the formula across other category headers.

Use SORT and FILTER for Dynamic Lists
Data Validation Tip: Since Data Validation can sometimes restrict spilled array references directly, you may need to define this formula as a Named Range or use the `#` spill operator (e.g., `=$E$2#`) in your validation source.
Advanced Formulas Made Easy

Create Dynamic Lists in WPS Spreadsheet

WPS Spreadsheet fully supports advanced dynamic array functions like FILTER, SORT, and UNIQUE. You can easily build dynamic dependent dropdowns and manage your data validations seamlessly.

  1. 1. Open your workbook: Launch WPS Spreadsheet and open your dataset containing the categories and subcategories.
  2. 2. Apply the FILTER formula: Type your `=FILTER(...)` formula in a blank cell to generate the spilled dynamic list.
  3. 3. Set up Data Validation: Go to the Data tab, click 'Validation', choose 'List', and reference your spilled array using the hashtag symbol (e.g., =$E$2#).
Fully compatible with Microsoft Excel's dynamic array functions including FILTER and SORT.Intuitive Data Validation manager for setting up dependent dropdown menus quickly.Free, lightweight, and fast alternative for powerful data analysis.
microsoft office alternative - wps office

Frequently Asked Questions

Why is my FILTER formula returning a #CALC! error?

This happens when the FILTER function finds no matching records and the optional [if_empty] argument is missing. Ensure you add a fallback value, such as "None", at the end of your formula: =FILTER(array, include, "None").

Can I use spilled arrays directly in Data Validation?

Yes, you can reference a spilled array in the Data Validation source box by adding a hashtag to the top-left cell reference (e.g., =$E$2#). However, some older spreadsheet iterations may require you to define a Named Range first.

Why are my dependent dropdown formulas showing a #SPILL! error?

A #SPILL! error means the formula needs multiple cells to display the results, but one or more of those destination cells are not empty. Clear the blocking cells or text to allow the dynamic array to populate fully.

Does the header text need to match the category column exactly?

Yes. The text in your category header cell must perfectly match the category column in your source table. Check for hidden spaces in your data and use the TRIM function if necessary to clean the text.