Dynamic Drop-Down List in Excel: Excel Table, UNIQUE and OFFSET

Part of the free Module 6: Data Validation · Lesson 12 of 14 · Full Excel course

Updated on 5 September 2026 · The Excel Table and OFFSET methods work in Excel 365, 2021, 2019 and 2016; the UNIQUE method needs Excel 365 or Excel 2021.

A dynamic drop-down list in Excel is a Data Validation list whose source grows and shrinks automatically as you add or delete items, so you never reopen the rule to fix the range. You build one with an Excel Table and a named range (every version), a UNIQUE spill range (Excel 365 and 2021), or an OFFSET and COUNTA formula for older files.

Why a fixed range source goes stale

The basic drop-down from the earlier lesson uses a Source such as =Lists!$A$2:$A$6. That works until somebody types a sixth item in A7. Data Validation does not notice: the new item is invisible in the drop-down, users start typing it by hand, and the sheet fills with spelling variants. Deleting an item is just as bad, because the list now shows an empty entry at the bottom. A dynamic source fixes both problems by describing the list in a way that Excel re-evaluates every time the drop-down opens.

Source type Example What happens when you add an item
Fixed range =Lists!$A$2:$A$6 Not shown until you edit the rule
Excel Table column Name that refers to =Table1[Item] Shown as soon as the Table row is added
Spill range =Lists!$E$2# Shown as soon as the formula recalculates
OFFSET formula =OFFSET(Lists!$A$2,0,0,COUNTA(Lists!$A:$A)-1,1) Shown as soon as the cell is filled

Method 1: Excel Table with a named range (all versions)

An Excel Table expands by itself when you type in the row directly under it, and any reference to a Table column expands with it. The catch is that the Data Validation Source box does not accept a structured reference such as =Table1[Item] typed directly; Excel reports an error. The fix is to go through a defined name or through INDIRECT.

  1. On a sheet named Lists, type the heading Item in A1 and your items below it.
  2. Click any item and press Ctrl+T. Tick My table has headers and click OK. Rename the table in Table Design > Table Name to something meaningful, for example tblItems.
  3. Go to Formulas > Defined Names > Define Name. Name it ItemList and set Refers to to =tblItems[Item]. Click OK.
  4. Select the cells that need the drop-down, open Data > Data Tools > Data Validation, choose List and type =ItemList in the Source box. Click OK.

If you prefer not to create a name, type =INDIRECT("tblItems[Item]") as the Source instead. The text inside the quotation marks is evaluated as a reference, which sidesteps the restriction. Either way, the drop-down now lists exactly the rows in the Table. Type a new item in the first empty row under the Table, or press Tab from the last cell, and it appears in the drop-down immediately.

Method 2: UNIQUE and SORT in a helper cell (Excel 365 and 2021)

Dynamic array functions let you build the list from raw data instead of maintaining it by hand. Put a formula in a spare column and point the validation rule at its spill range with the # operator.

  1. On the Lists sheet, click E2 and enter =UNIQUE(A2:A200). The distinct items spill down column E.
  2. For a tidy list with blanks removed and alphabetical order, use =SORT(UNIQUE(FILTER(A2:A200,A2:A200<>""))) instead.
  3. Select the input cells, open Data Validation, choose List and type =Lists!$E$2# in Source.
  4. Click OK. The drop-down shows the spilled values and resizes whenever the source data changes.

The source range in step 1 can be a Table column too: =SORT(UNIQUE(tblSales[Product])) turns a transaction list into a product picker without any manual list at all. This is the best method when the drop-down should reflect data that other people keep adding to.

Method 3: OFFSET with COUNTA for older versions

If the file must open in Excel 2016 or 2019 and you do not want a Table, OFFSET can size the range by counting the entries. With the heading in A1 and items from A2 down, the Source is:

=OFFSET(Lists!$A$2,0,0,COUNTA(Lists!$A:$A)-1,1)
Argument Value Meaning
reference Lists!$A$2 Starting cell, the first item
rows, cols 0, 0 Do not move away from A2
height COUNTA(Lists!$A:$A)-1 Number of filled cells in column A minus the heading
width 1 One column

Type the formula in the Source box, or store it as a defined name and refer to the name. The count includes every non-empty cell in column A, so keep the column free of notes, totals or blank gaps. OFFSET is a volatile function: it recalculates every time anything in the workbook changes. One drop-down is harmless; hundreds of OFFSET-based names in a large model can make every keystroke slow, which is the main reason to prefer a Table when you can.

Which method to choose

Feature Excel Table + name UNIQUE spill range OFFSET + COUNTA
Excel versions 2007 and later 365 and 2021 All versions
Grows automatically Yes, when rows are added to the Table Yes, on recalculation Yes, when cells are filled
Handles blanks in the list Blank rows appear as blank entries Yes, with FILTER No, blanks shorten the range
Removes duplicates No Yes No
Sorted output Only if the Table is sorted Yes, with SORT Only if the column is sorted
Performance Non-volatile, fast Non-volatile, fast Volatile, slows big workbooks
Best for Shared files, maintained lists Lists built from raw data Legacy files without Tables

Worked example: a growing product list

An order sheet needs a Product drop-down in column C. The products are kept on the Lists sheet in a Table named tblProducts with one column, Product.

Row A: Product
1 Product
2 Keyboard
3 Mouse
4 Monitor
5 Webcam
  1. Create the name ProductList with Refers to =tblProducts[Product].
  2. Select C2:C500 on the order sheet, open Data Validation, choose List, Source =ProductList, and click OK. The drop-down shows four products.
  3. Go back to the Lists sheet, click A6 and type Headset. The Table border extends to row 6.
  4. Return to the order sheet and open any drop-down in column C. Headset is now the fifth entry, and the rule was never edited.

In Excel 365 you can skip the Lists sheet entirely by entering =SORT(UNIQUE(tblOrders[Product])) in a helper cell and using its spill reference as the Source; every product that has ever been ordered becomes an option in alphabetical order.

Tips and common mistakes

  • No blanks in the middle. COUNTA counts filled cells, not the last row, so a gap makes the OFFSET range stop short. Tables show gaps as empty drop-down entries.
  • Remove duplicates from the source. A Table lists Mouse twice if it is typed twice. Wrap the source in UNIQUE, or use Data > Remove Duplicates on the list.
  • Keep Ignore blank ticked. Unticking it in the Data Validation dialog forces users to choose a value before moving on, which is rarely what a form wants.
  • Keep In-cell dropdown ticked. If the arrow disappears, this box was cleared. In Excel 365 the drop-down also offers autocomplete as you type, which makes long dynamic lists easy to use.
  • Put the list on another sheet. Name it Lists, hide it if you like, and protect it so nobody overwrites the source. Names and spill references work across sheets in every version since Excel 2010.
  • Type new items inside the Table. A value typed two rows below the Table, or in a different column, does not extend it. Use the row directly under the last row or press Tab from the last cell.
  • Avoid volatile names in big models. Prefer the Table method to OFFSET when a workbook already recalculates slowly.

Errors and how to fix them

Symptom Cause Fix
#SPILL! in the helper cell Something sits in the cells the UNIQUE formula needs Clear the column below the formula, or move the formula to an empty column
The Source box rejects =Table1[Item] Data Validation does not accept structured references directly Create a name that refers to the Table column, or use INDIRECT with the reference in quotation marks
Drop-down is empty COUNTA returns 0 or 1, or the spill formula returns an error Check the heading is in row 1 and the items start in row 2; fix the helper formula
Blank items at the end of the list The Table or spill range includes empty rows Delete the empty Table rows; wrap the source in FILTER(range,range<>””)
New item does not appear It was typed outside the Table, or the rule still points at a fixed range Move the item into the Table; reopen the rule and confirm the Source is the name or spill reference
Error: The list source must be a delimited list or a reference A spill reference was used in Excel 2019 or earlier Switch to the Table or OFFSET method

Practice exercise

  1. On a new sheet, type the heading Department and five department names, convert the list to a Table, name the column with a defined name and apply it as a drop-down on another sheet.
  2. Add two more departments under the Table and confirm they appear without touching the rule.
  3. In Excel 365, enter a list of twenty city names with a few duplicates and blanks, build a SORT(UNIQUE(FILTER())) helper formula and use its spill range as a drop-down source.
  4. Rebuild the same city drop-down with OFFSET and COUNTA, then insert a blank row in the middle of the list and observe what happens to the last entry.
  5. Compare the three lists side by side and note which one you would hand to a colleague who still uses Excel 2016.

Key takeaways

  • A fixed range source misses new items; a dynamic source re-evaluates every time the drop-down opens.
  • Excel Tables expand automatically, but the Source box needs a defined name or INDIRECT to reach a Table column.
  • UNIQUE, SORT and FILTER build a clean, sorted list from raw data in Excel 365 and 2021; refer to it with the # spill operator.
  • OFFSET with COUNTA works everywhere but is volatile and breaks on blank gaps.
  • Keep the list on a separate sheet, avoid blanks and duplicates, and add new items inside the Table.

Related lessons

Frequently asked questions

How do I make a drop-down list in Excel update automatically?

Store the items in an Excel Table (Ctrl+T), create a defined name whose Refers to box contains the Table column, such as =tblItems[Item], and use that name as the Data Validation Source. Every item typed in the row under the Table joins the drop-down at once. In Excel 365 you can instead point the Source at a UNIQUE spill range with the # operator.

Why does Data Validation not accept a Table reference?

The Source box only accepts a cell reference, a defined name or a delimited list, so a structured reference typed directly returns an error. Wrap it in a name, or type =INDIRECT with the Table column text in quotation marks. Both are evaluated to the live Table column, so the drop-down still grows with the Table.

Can I use UNIQUE directly in the Data Validation Source box?

No. Data Validation cannot evaluate array formulas in the Source box, even in Excel 365. Enter =UNIQUE(range) in a helper cell on the list sheet and refer to that cell with the spill operator, for example =Lists!$E$2#. The rule then follows the spill range as it grows or shrinks.

Is OFFSET bad for a dynamic drop-down list?

It works in every Excel version, but OFFSET is volatile, so it recalculates with every change in the workbook. For a handful of lists the cost is unnoticeable. In a large model with many volatile names, recalculation becomes slow, so use an Excel Table with a defined name whenever the file will be opened in Excel 2007 or later.

How do I remove blank entries from a dynamic drop-down?

Blanks appear when the Table or range contains empty rows. Delete empty Table rows, or in Excel 365 wrap the source in FILTER(range,range<>””) before UNIQUE so blanks never reach the list. With OFFSET, blanks in the middle are worse: they shorten the range and cut off the last items, so keep the column contiguous.

Want the finished version? Ready-made Excel dashboards, trackers and VBA systems with dynamic drop-downs are available at NextGenTemplates.com.