【excel】设置二级可变联动菜单

文章目录

  • 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项
  • 【步骤】
    • step1 制作辅助列
      • 1.列转行
      • 2.在辅助列中匹配班级成员
    • step2 名称管理器
    • step3 制作二级下拉菜单
    • step4 消除二级菜单中的空白
  • 【总结】

之前做完了 【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:$A$100=I$1,ROW($1:$100),4^8),绝对引用A列的前100行,也就是”班级“列的内容,虽然这里也包含了不需要的表头,但是没关系,并不影响结果。
这部分是一个数组公式,它检查A1:A100中的每一个单元格是否等于I1单元格的值。
如果某个单元格的值与I1相等,则返回该单元格的行号(例如,如果A5等于I1,则返回5)。
如果不相等,则返回4^8(即65536,这是一个远大于100的数字,因此不会影响后续SMALL函数的结果)。

其实公式=row(1)是会报错的,但是上面的公式不会报错。所以为了更清楚的理解和公式的严谨,可以将上面的if()函数写成IF($A$1:$A$100=I$1,ROW($A$1:$A$100),4^8)
SMALL(IF($A$1:$A$100=I$1,ROW($1:$100),4^8),ROW(A1)),用来返回数组中的第k个最小值。
if()函数中返回的是A列的行号或者65536。如果匹配I1则返回的是行号。
本例中,if()函数先判断A1与I1,然后返回65536;再判断A2与I1,然后返回2;再判断A3与I1,返回行号3;判断A4与I1,返回65536;……
也就是if函数返回的(数组)值为{65536,2,3,65536,……}。
因为=INDEX($B:$B,SMALL(IF($A$1:$A$100=I$1,ROW($1:$100),4^8),ROW(A1)))&""是要下拉的,所以row()函数是变动的,会变成row(A1)、row(A2)、row(A3)……row(A100)。
在这里插入图片描述
small()函数是返回数组中第k个最小值,那么就是依次返回第一、第二、第三……个最小值,那么就是返回与I1单元格的值相等的A列值的行号,也就是数组中的2,3,……
INDEX($B:$B,SMALL(IF($A$1:$A$100=I$1,ROW($1:$100),4^8),ROW(A1)))
INDEX函数的基本语法是INDEX(array, row_num, [column_num]),其中Array是必需的参数,表示单元格区域或数组常量。Row_num和Column_num是可选参数,分别表示行号和列号。如下图,再X1到X5单元格区域中,返回第2行的值:
在这里插入图片描述
因此INDEX($B:$B,SMALL(IF($A$1:$A$100=I$1,ROW($1:$100),4^8),ROW(A1)))是返回B列中,与I1单元个的值相等的A列的行号对应的值,也就是B2、B3……
将I2单元格中的公式向右、向下填充,得到结果:
在这里插入图片描述
因为公式的结尾有&"",所以匹配不上的显示为空,而不会显示#N/A等报错信息。

step2 名称管理器

选中有公式的I到S列,向下选中100行(行数根据实际需要)。为了方便演示,我选择了20行。
选中这个区域以后,【公式】-【根据所选内容创建定义的名称】:
在这里插入图片描述
只选择【首行】,单击确定:
在这里插入图片描述
点击上方【名称管理器】,发现已经创建好了名称:
在这里插入图片描述
随便点开一个,就能看到它所对应的名称及单元格区域:
在这里插入图片描述
关闭名称管理器,返回excel编辑界面。

step3 制作二级下拉菜单

选中二级下拉菜单的单元格G2,然后【数据】-【数据验证】-【数据验证(V)】进入数据验证对话框:
在这里插入图片描述
选择【序列】,在来源中输入公式=indirect($F$2),点击确定:
在这里插入图片描述
这时,二级下拉菜单也做好了:
在这里插入图片描述
但是这里有个问题,就是下拉菜单里面有空白。

step4 消除二级菜单中的空白

选中二级菜单项,也就是本例中的G2,再次进入【数据】-【数据验证】-【数据验证(V)】,将【设置】选项卡下【来源】中的公式由刚才的=indirect($F$2)替换为:=OFFSET(INDIRECT($F$2),0,0,MATCH(CHAR(1),INDIRECT($F$2),-1),1)
在这里插入图片描述
尝试解释一下=OFFSET(INDIRECT($F$2),0,0,MATCH(CHAR(1),INDIRECT($F$2),-1),1)的含义:
公式里面,最重要的是MATCH(CHAR(1),INDIRECT($F$2),-1)
MATCH函数用于在范围或数组中查找一个值,并返回其相对位置。具体参数:
在这里插入图片描述
这里的查找范围是INDIRECT($F$2)。在本例中,当F2中的选项是“三班”时,对应的数据范围是名称管理器中指定的N2:N20单元格区域(因为当时选了首行作为名称,所以就不包含在这里了)。
那么,match()函数在这里的意思就是,在N2:N20单元格区域查找返回ASCII值为1的字符,即“SOH”(Start of Header)字符,并返回它的相对位置。MATCH函数的第三个参数-1,是从范围中查找大于或等于char(1)的最小值。可以理解为char(1)是个极小值。大于或等于char(1)的就是N2:N20单元格区域中有值的4项,也就是A9、A10、A12、A16,而其它的单元格都是空白,所以一定是小于char(1)的。这时返回的值就是4,也就是match()函数返回结果4。
=OFFSET(INDIRECT($F$2),0,0,MATCH(CHAR(1),INDIRECT($F$2),-1),1)就是,在F2所代表的区域(N2:N20)中,不偏移的选择4列,也就是有值的值为A9、A10、A12、A16的这四个单元格。因为这是【数据验证】中【来源】里面的公式,所以,下拉菜单将只显示有值的结果,空白的区域就不可见了。
这里挺难理解的,我也是边看边试着去理解。

【总结】

1、首先做辅助数据。先用=OFFSET($D$1,COLUMN(A1)-1,0)&""进行列转行,得到表头。再用=INDEX($B:$B,SMALL(IF($A$1:$A$100=I$1,ROW($1:$100),4^8),ROW(A1)))&""得到表数据。
这个辅助区域的作用是定义名称管理器。
名称管理器的名字就是表头,而一级下拉菜单,也就是F2单元格的内容与名称管理器的名称一致时,二级下拉菜单的序列来源使用公式INDIRECT($F$2),也就是对名称使用了函数indirect(),这个函数指向名称管理器的内容,也就是辅助区域内的数据值。
2、在辅助区域,用名称管理器定义名称。这个定义的名称,与以及下拉菜单的内容一致。
3、利用【数据验证】制作二级下拉菜单,并在【来源】中写入公式=OFFSET(INDIRECT($F$2),0,0,MATCH(CHAR(1),INDIRECT($F$2),-1),1)用以消除二级下拉菜单中的空白选项。
4、每一步的公式都略有点复杂,不太好理解。会用就好了。
模板我上传了,在文章的最上面。。不过不知道网站是不是要付费才能下载,真的坑。。。
以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/675406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

导航时间与坐标转换

前言: 该章节代码均在Gitee中开源:因为这章是学校作业,所以稍微正经点. 时空位置转换https://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/%E5%AF%BC%E8%88%AA%E6%97…

Idea-Linux远程开发部署

第一步:File->Remote Development 第二步: 第三步: 第四步:在Host位置填写Linux虚拟机的IP地址,在Username、Password填写对应的账号密码后点击Test Connection测试连接。 第五步: 第六步:在…

【leetcode--文本对齐(还没整理完)】

根据题干描述的贪心算法,对于每一行,我们首先确定最多的是可以放置多少单词,这样可以得到该行的空格个数,从而确定该行单词之间的空格个数。 根据题目中填充空格的细节,我们分以下三种情况讨论: 当前行是…

Vue——样式绑定的几种方式

文章目录 前言往期回顾绑定对象绑定对象的另一种写法绑定数组数组与对象的嵌套 前言 样式绑定在vue中属于一种很常见的操作。在之前博客中针对样式的绑定操作,介绍了一个指令v-bind。缩写为:xxx。 vue 官网 样式绑定 往期回顾 先简单回顾下最开始绑定标签样式的操…

搭建gateway网关

1.创建springBoot项目 可以将Server URL换成start.aliyun.com 2.配置路由与跨域处理 路由: server:port: 10010 # 网关端口 spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- i…

Java的冷知识你知道吗?

1、方法参数不能超过255个 在Java中,方法的参数数量是有限制的,最多不能超过255个。这个知识点可能对于大多数程序员来说并不常用,因此即使是经验丰富的Java开发者也可能不清楚这一点。2、Java中的自动装箱与拆箱 自动装箱是Java 5引入的新特…

站点被篡改快照被劫持解决服务方法教程_一招制敌

站点被篡改快照被劫持解决服务方法教程_一招制敌 被篡改表现形式: 站点打不开或跳转到别的网站。 攻击者目的: 报复、勒索、卖防御产品(如DDOS防御产品)。 攻击成本: 工具(如VPN购买)成本、人…

当新手小白有了一块【香橙派OrangePi AIpro】.Demo

当新手小白有了一块【香橙派OrangePi AIpro】.Demo 文章目录 当新手小白有了一块【香橙派OrangePi AIpro】.Demo一、香橙派OrangePi AIpro概述1.简介2.引脚图 二、“点亮”香橙派OrangePi AIpro1.官方工具下载2.官方镜像下载3.镜像烧录4.访问香橙派 AIpro 三、香橙派OrangePi A…

数据结构第三篇【链表的相关知识点一及在线OJ习题】

数据结构第三篇【链表的相关知识点一及在线OJ习题】 链表链表的实现链表OJ习题顺序表和链表的区别和联系 本文章主要讲解关于链表的相关知识,喜欢的可以三连喔 😀😃😄😄😊😊🙃&#…

Dubbo 自定义 Filter 编码实例

Dubbo的Filter机制为我们做应用的扩展设计提供了很多可能性,这里的Filter也是“责任链”机制的一种实现场景,作为Java码农,我们也经常接触到很多责任链的实现场景,如Tomcat进入Servlet前的filter,如Spring Aop代理的链…

性能飙升50%,react-virtualized-list如何优化大数据集滚动渲染

在处理大规模数据集渲染时,前端性能常常面临巨大的挑战。本文将探讨 react-virtualized-list 库如何通过虚拟化技术和 Intersection Observer API,实现前端渲染性能飙升 50% 的突破!除此之外,我们一同探究下该库还支持哪些新的特性…

自友科技破解走班教育排课难题

新高考后,校园教务都面临着晋级,其中走班教育的分班排课是个巨大的挑战。 所以在分班排课的时候要清楚一下几个问题 一是:清楚的核算学生的选考科目。学生选科提交后做好并承认,最好是在分班后不要改或很少的一部分人改动。 二是…

手写防抖debounce

手写防抖debounce 应用场景 当需要在事件频繁触发时,只执行最后一次操作,可以使用防抖函数来控制函数的执行频率,比如窗口resize事件和输入框input事件; 这段代码定义了一个名为 debounce 的函数,它接收两个参数:fn…

linux中最基础使用的命令

小白学习记录: 前情提要:Linux命令基础格式!查看 ls看目录的小技巧 进入指定目录 cd查看当前工作目录 pwd创建一个新的目录(文件夹) mkdir创建文件 touch查看文件内容 cat、more操作文件、文件夹- 复制 cp- 移动 mv- 删除【危险操作&#xff…

Scrum 的速度如何衡量和提高

了解你的 Scrum 团队的实际开发速度是非常多敏捷团队的诉求,而速度(Velocity)作为敏捷项目的度量工具,为管理者提供了对团队工作能力深入了解的机会。 这份指南将深入探讨 Scrum 中速度的概念,指导你如何进行计算&…

cURL error 60: SSL certificate problem: unable to get local issuer certifica

本地小程序把接口换到本地的服务器接口,然后就报错了: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) 经查询查到:此问题的出现是由于没有配…

5月更新!优维EasyOps®平台7大新功能上线~

5月,优维EasyOps全平台产品能力又升级啦!👏 快来看看都有新增的功能与优化吧!👇 重点升级 架构可观测 1.系统监控态势感知 过去,用户在使用监控平台的过程中,存在如下问题: 告警…

基于单片机的超声波倒车雷达设计

摘 要:文 章设计了一种基于单片机的超声波倒车雷达系统,以 AT89C51 型单片机作为控制核心,集距离测量、显示,方位显示和危险报警于一体,以提高驾驶者在倒车泊车时的安全性和舒适性。本设计采用 Keil 软件对系统程序…

详解:重庆耶非凡的选品师项目有哪些优势?

在竞争激烈的电商市场中,重庆耶非凡科技有限公司凭借其独特的选品师项目,成功地在众多企业中脱颖而出。这一项目不仅体现了公司对市场趋势的敏锐洞察力,更彰显了其专业的选品能力和对消费者需求的深刻理解。 首先,耶非凡的选品师项…

军用电源性能测试有哪些测试项目?需要遵循什么标准?

为了确保军用电源在极端条件下能够正常工作,必须对其进行一系列严格的性能测试。这些测试不仅包括效率、电压调整率和负载调整率等基本参数的测试,还包括动态响应能力、绝缘电阻、耐压测试、温度系数以及高低温循环等综合性能的评估。 测试项目 效率 电压…