做信息登记表的时候,最怕的就是别人乱填。你想收"广东省-深圳市",结果收上来的是"广东深圳""深圳""guangdong",五花八门,后期统计的时候想哭都来不及。
下拉菜单能解决乱填的问题,但普通下拉菜单有个尴尬:省份选了广东,城市那一栏还是把全国几百个城市都列出来,选起来照样费劲,还容易选错。
今天讲的是联动下拉菜单:第一列选了省份,第二列自动只显示这个省的城市。整个过程就两步,不用写VBA,五分钟设好。
先把数据源摆好
联动菜单的核心是"数据源要按规矩放"。找一张空白工作表,按下面的格式排:
- 第一行放省份名:A1填"广东省",B1填"江苏省",C1填"浙江省"
- 每个省份下面竖着放它的城市:A2广州市、A3深圳市、A4东莞市……B列下面放南京、苏州、无锡……
也就是说,每一列的第一个单元格是省份,下面全是这个省的城市。列与列之间城市数量不一样没关系,空着就行。
第一步:批量定义名称
这一步是让Excel记住"哪些城市属于哪个省"。
- 选中整个数据区域,包括第一行的省份名(比如A1:C20)
- 点顶部菜单的【公式】选项卡,找到【根据所选内容创建】(在"定义的名称"分组里)
- 弹出的小窗口里,只勾选"首行",其他全部取消勾选,点确定。
这一下,Excel就自动创建了三个名称:广东省、江苏省、浙江省,每个名称对应下面的城市清单。
想检查有没有建成功,按 Ctrl+F3 打开名称管理器看一眼,三个省的名字都在,就说明成了。
第二步:设置两级下拉菜单
回到你的登记表,假设D列填省份、E列填城市。
先设省份列:- 选中D2:D100(你需要填的范围)
- 点【数据】→【数据验证】(有的版本叫"数据有效性")
- 验证条件选"序列",来源里框选数据源表的第一行省份名(比如 =数据源!$A$1:$C$1),确定
再设城市列:- 选中E2:E100
- 同样打开【数据验证】,选"序列"
- 来源这里不框选区域,直接输入公式:
=INDIRECT(D2) - 点确定,如果弹出"源当前包含错误"的提示,选"是"继续(因为D2还没选省份,属正常现象)
设置完成。现在D2选"广东省",E2的下拉箭头点开,只有广州、深圳、东莞这些广东的城市;D2换成"江苏省",E2立刻变成南京、苏州那一串。
💡 INDIRECT函数的作用是"把文字变成引用"。D2里写着"广东省",INDIRECT(D2)就等于去找名称"广东省",也就是第一步定义的那串城市。这就是联动的原理。
两个容易翻车的地方
⚠️ 省份名里不能有空格和特殊符号。名称定义不允许"广东 省"这种带空格的写法,如果你的省份名带了括号、斜杠,先改掉再定义名称,否则第一步就会报错。
⚠️ 先选省份再选城市。如果先改了省份,城市列原来选的值不会自动清空,会出现"江苏省-深圳市"这种错配。习惯上改了省份后,顺手把城市重选一遍;要求严格的表格,可以再加一层条件格式把错配标红。
总结
联动下拉菜单就两步:
- 数据源按"首行省份、下方城市"排好,用【根据所选内容创建】批量定义名称
- 省份列用普通序列,城市列的来源写
=INDIRECT(D2)
这个方法不止能做省市联动,部门-员工、类别-产品、年级-班级,所有两级分类都是同一个套路。学会一次,处处能用。
你平时收表的时候遇到过哪些离谱的填写方式?评论区聊聊,下期挑呼声最高的问题写。