excel做下拉选项靠「数据验证」功能就能实现,普通的一级下拉只要指定好选项区域就行。要是想做联动的二级下拉——比如先选省份,后面的城市列表自动跟着对应,就多走一步「根据首行创建名称」,再用 indirect 把一级选项和二级列表关联起来。
先整理一级和二级选项区域
操作第一步,先把源数据摆成清晰的结构:左侧是你要填的业务表格,比如预留「所在省份」「所在城市」两列,右侧单独放选项库,第一行全放一级选项,比如山西、陕西、黑龙江,每一列下面接着放对应省份的所有城市。

这里有个容易踩坑的细节:一级选项的文字,必须和后面对应列的名称完全一致。比如一级下拉里选的是「陕西」,那城市列表这一列的名称也要叫「陕西」,不能多打空格,也不能写成「陕西省」,不然二级下拉很可能读不到内容。
给二级选项区域批量创建名称
操作第二步,选中右侧整个选项区域,要把第一行的省份标题和下面所有城市内容都包含进去。点开顶部菜单栏的「公式」选项卡,点击「根据所选内容创建」,弹出的窗口里只勾选「首行」,确认后Excel就会自动把每一列的城市列表,分别用该列顶部的省份名来命名。

要是你的一级选项带空格、特殊符号,或者用数字开头,名称大概率会创建失败。保险起见一级选项尽量用短的纯文字,比如省份名、部门名、类别名就行。建好的所有名称,也可以去「公式」选项卡的「名称管理器」里核对。
设置第一级下拉选项
操作第三步,选中要放一级下拉的单元格,比如 C2。切到「数据」选项卡,点击「数据验证」,允许类型选「序列」,来源选刚才右侧第一行的所有一级选项区域,示例写法是 =$G$1:$I$1,确认后 C2 就会出现省份下拉框。

要是想让 C 列整列多行都能用一级下拉,要么提前选中 C2:C100 整段区域再设置数据验证,要么设置好 C2 之后直接向下复制格式就行,注意后面做二级下拉引用的时候,要留好相对引用的空间,让行号能自动跟着变。
用 INDIRECT 设置第二级下拉选项
操作第四步,选中要放二级下拉的单元格,比如 D2。同样打开「数据验证」,允许类型还是选「序列」,来源栏直接输 =INDIRECT($C2)。这个公式的作用很简单:D2 的下拉可选内容,完全读取 C2 当前选中的省份对应的列表。

这里特意把列号 C 加了美元符号固定成 $C2,这样就算你向右复制公式,引用也不会跑偏;行号别加锁不固定,向下复制的时候才能自动变成 $C3、$C4。如果只做一行的下拉,直接写 =INDIRECT(C2) 也能跑,但批量复制的时候稳定性差很多。
测试二级联动是否正常
操作第五步,测试效果:先在一级下拉里随便选一个省份,再点开旁边的二级下拉试试。比如 C2 选「陕西」,D2 里就只会显示西安、榆林、延安这些陕西的城市;换成选黑龙江,二级选项也会自动刷新成黑龙江的对应城市。

要是做完二级下拉点开是空的,优先排查三个地方:一是一级选项的文字和对应的名称是不是完全匹配,有没有多字少字多余空格;二是之前的名称有没有创建成功;三是数据验证里的 INDIRECT 引用,有没有指错对应的一级下拉单元格。这三处都核对对,二级联动基本就能正常跑起来。











