文章目录
- 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项
- 【步骤】
- step1 制作辅助列
- 1.列转行
- 2.在辅助列中匹配班级成员
之前做完了 【excel】设置可变下拉菜单(一级联动下拉菜单),开始做二级联动菜单。
【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项
示例:A、B列为原始明细数据。
K2单元格为一级菜单,在K2单元格内容选定后,要求在L2单元格的下拉菜单中,显示K2对应的内容。
如,K2单元格为”一班“时,L2下拉菜单中,显示”一班“成员的列表:
【步骤】
在【excel】设置可变下拉菜单(一级联动下拉菜单)中,我们曾做过一个辅助列(辅助单元格),在此处具体步骤略。
我们从这篇文章的内容出发向下走。所以,当前我们的表格已经是这样的:
我们的目标是在G2单元格做二级下拉菜单。
step1 制作辅助列
1.列转行
辅助列D1单元格的公式写好以后,我们先将里面的内容横向展开。
选择I1单元格输入公式:=OFFSET($D$1,COLUMN(A1)-1,0)&""
,然后横向拖动,多填几列(比如填充10列,就是预留出10个班级…具体根据实际需要)
OFFSET()公式,在这里是取D1单元格中的内容,这里COLUMN(A1)中的单元格是随着拖动公式而变化的。
在I1中,偏移量是1-1=0,OFFSET($D$1,COLUMN(**A1**)-1,0)
的结果是D1单元格中的第一项,也就是”一班“;
公式拖动到J1的时候偏移量是2-1=1,OFFSET($D$1,COLUMN(**B1**)-1,0)
的结果是D1单元格中的第二项,也就是”六班“;
公式向右拖动n个单元格,就是偏移n-1,相应的取第n项(注意这里的逻辑,从第一项,偏移n-1个,就是第n项,没问题吧?)。
公式后面的&“”,是将向右拖动的结果中的0替换为空。
因为拖动公式的单元格数量可能超过D1单元格中班级的数量,如果不写&""
,后面的结果中将出现0,这是我们不想看到的:
&""
可以将结果强制转换成文本,这样结果中的0就不再显示出来了。
2.在辅助列中匹配班级成员
在I2单元格写入公式=INDEX($B:$B,SMALL(IF($A$1:$A$100=I$1,ROW($1:$100),4^8),ROW(A1)))&""
,注意绝对引用的位置。
解释一下公式,从内往外展开:
IF($A 1 : 1: 1:A$100=I$1,ROW($1:$100),4^8),绝对引用A列的前100行,也就是”班级“列的内容,虽然这里也包含了不需要的表头,但是没关系,并不影响结果。
这个if()函数是个数组函数,从一开始说起。当A1的值与I1单元格相同时,返回1,否则返回4的8次方(就是返回一个超大值,用以区分A列与I1相同的返回值。当他们匹配上时,返回的最大值不就是row(100),也就是100吗,而4的8次方远大于100)。