本次给各位介绍一下,如何在Excel中制作多级下拉菜单,并且两级下拉菜单之间具备联动功能。
学会之后,各位可以尝试用前一节课和本节课的内容,制作出无数级可联动的下拉菜单。
1. 准备多级下拉菜单内容。
首先,最左侧一列为一级菜单{亚洲、北美、欧洲、南美}
一级菜单右侧为其对应的二级菜单内容。

2. 对第1步的菜单内容进行名称定义。

什么是名称定义:对于选定单元格定义一个名字,简单说,就是给选定的单元格起一个名字。
当按照上图(注意,是上图)操作完毕,会发现Excel表左上角的 [单元格名称框] 的小三角按钮点击后,会出现下图(注意,是下图)内容。
这里就会出现上图定义好的{北美、南美、欧洲、亚洲}几个名称。
当你分别选择这几个名称,会发现,Excel内会自动框选处各个名称定义的单元格范围。
3. 做第一级下拉菜单.
这里采用最常见的方式,框选来源为{亚洲、北美、欧洲、南美}所在的单元格。(当然,也可以使用上一节课讲的方式制作自动更新的下拉菜单。)

制作完成效果如下

4. 制作二级菜单
这里会遇到几种错误,我一一演示讲解。
如果你按照下图操作,选择了二级菜单单元格,打开数据验证,来源=INDIRECT($C$11),然后点击确认会弹出一个错误框。
这是因为 [大洲]列没有选择任何选项,只要你在C11单元格选择任何一个大洲的值,按照上述流程,就不会弹出报错。
当然,你也可以直接点击错误框里的 ”是”,这并没有什么影响。

以下斜体部分,可以看一下,能理解就理解,不能理解也无需强求。以下部分是否可以理解,是对Excel函数学习的一个入门门槛,我尽可能写的简单清晰。后续也许出一个视频来讲解会更好。
这里简单讲一下INDIRECT()函数,官方的解释是“返回由文本字符串指定的引用。 此函数立即对引用进行计算,并显示其内容。 ”。理解起来可能比较困难。
如果各位记得前面我们讲的单元格命名,我们是对二级菜单每一行做了命名的,前面说了,当你在名称框里选择北美,如下图,会发现{美国、墨西哥、加拿大、古巴}四个单元格被选定了。意思就是{美国、墨西哥、加拿大、古巴}四个单元格在Excel里被起了个名字叫做“北美”,那么我在Excel里任何位置,都可以通过调用“北美”这两个字来调用{美国、墨西哥、加拿大、古巴}四个单元格。
那么问题来了,我们要如何调用“北美”这两个字?这就用到了INDIRECT()函数,INDIRECT函数后面的括号里可以写“B2”这样的单元格名称,也可以写“北美”这样的对单元格的命名。
也许大家也会有一个问题,如果我写
INDIRECT(B2),就是调用B2单元格的内容,如果是下图里,那就会显示B2的内容“亚洲”,那我直接写 “=B2”不是一样可以调用B2的内容“亚洲”么?这样说其实也是对的,不过,INDIRECT(”B”&(10+11))这种写法就等于INDIRECT(B22),也就是“=B22”。这是什么意思呢,意思就是我们可以用公式代替单元格的具体位置。

前面讲了INDIRECT()函数,下面来看下图,下图看起来可能和上面的一张图很像,但是注意图片上的第3步。
上面一张图是=INDIRECT($C$11),而下面这张图是=INDIRECT(C11)。而正确的应该是下面这张图。这一点非常重要,请务必清楚。
下面我来讲一下简单的逻辑
因为二级菜单是根据一级菜单变化的,所以二级菜单的内容是根据每一行的一级菜单的内容通过INDIRECT()函数进行调用的。
意思就是INDIRECT()函数括号里的内容是随着每一行而变化的。
那么就不能是=INDIRECT($C$11),因为 $ 符号的意思是锁定,如果按照=INDIRECT($C$11)这种写法,那么国家列的每一行的下拉菜单都会是C11所选择的一级菜单的二级菜单。
如果我想让国家列每一行的二级菜单跟着大洲列的一级菜单变化,就必须=INDIRECT(C11)这样写,去掉 $ 符号。

最后点击确认,结果如下:

