

数据有效性可以产生下拉列表,那么是否可以产生相互关联的多级下拉列表呢?
类似如下效果:

答案是完全可以的。
数据有效性配合函数也可做出这种效果,这篇文章只讲解用VBA的方式实现相互关联的多级下拉列表。
▷看一下数据源:
假如我们手里的数据源是这样的。

▷解决思路:
因为省份和城市都存在重复字段,我们需要去重复再设置数据有效性。
『用字典对象获取省份名称去重复作为数据有效性序列的来源,完成一级下拉列表;同样,利用字典将市名去重复后作为二级下拉列表;三级下拉列表同样的办法。』
因为要实现联动的效果,所以我们要结合工作表事件Worksheet_SelectionChange来完成。
▷代码及知识点:
就不拿代码凑字数了,附件公众号(ID:todayvba)后台回复“有效性”获取。

▷几个小知识点
■Join函数
语法
通俗来讲,Join函数就是把一维数组每个元素通过某个设定的字符串连接起来成为一个字符串。和它作用相反的函数是split函数。

■Offset函数
代码中多次用到offset函数,主要就是因为是对B列省份数据做的循环,需要用Offset函数来获取同一行市名和县名数据。
语法:Range.Offset(行偏移数,列偏移数)
参数说明:
•行偏移 - 正数,负数,零值(或者不写),正代表向下偏移,负数向上。
•列偏移 - 正数,负数,零值(或者不写),正代表向右偏移,负数向左。
注意:偏移的只是位置,单元格或者单元格区域内容不会跟着移动。

•设置数据有效性部分代码
录制宏得到,这么难的代码谁记得住,用到时候录制一下即可。
推荐阅读:
你的小黄鸭来了~ | 操作Txt | VBA学习经验 | 合并拆分 | 字符串函数 | 循环知识