【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、每一步的公式都略有点复杂,不太好理解。会用就好了。
模板我上传了,在文章的最上面。。不过不知道网站是不是要付费才能下载,真的坑。。。
以上。
相关文章:
【excel】设置二级可变联动菜单
文章目录 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项【步骤】step1 制作辅助列1.列转行2.在辅助列中匹配班级成员 step2 名称管理器step3 制作二级下拉菜单step4 消除二级菜单中的空白 【总结】 之前做完了 【excel】设置可变下拉菜单ÿ…...
8月1-3日西安国际储能产业博览会
同期举办:2024西部国际氢能源及燃料电池产业博览会 2024年12月5-7日 西安国际会展中心 一、展会概况: 在能源转型和“双碳”目标的推动下,风电、太阳能、氢能等能源产业得到快速的发展,新型储能日益成为我国建设新型能源体…...
MySQL事务处理:ACID属性基础与实现概览
前言 本文核心思想就是介绍一下 Mysql ACID 的实现,至于事务、锁、redo 的底层结构及实现原理,后面会单独出文章介绍。之所以这样是不希望一篇文章过长,在闲暇时间就可轻易掌握一个知识点。 ACID 介绍 ACID 是数据库管理系统&#x…...
PostgreSQL 修改表结构卡住不动
目录 1 问题2 实现 1 问题 今天遇到的一个问题记录一下,因为系统上的一个改动需要同步脚本至测试库上,具体的脚本内容也很简单,就是修改了某张表的一个字段。但是无论怎么操作都是一直卡住,表的数据量很小就十几条数据所以初步怀疑是表被锁了…...
wvp-gb28181-pro搭建流媒体服务器,内存占用过高问题
直接给出解决办法,端口暴露的太多了,暴露了500个端口导致从3g---->11g 遇到的问题,直接使用镜像《648540858/wvp_pro:latest》在宿主机上运行,如我下面的博客 https://blog.csdn.net/weixin_41012767/article/details/137112338?spm=1001.2014.3001.5502 docker run …...
项目-双人五子棋对战: websocket的讲解与使用 (1)
项目介绍 接下来, 我们将制作一个关于双人五子棋的项目, 话不多说先来理清一下需求. 1.用户模块 用户的注册和登录 管理用户的天梯分数, 比赛场数, 获胜场数等信息. 2.匹配模块 依据用户的天梯积分, 实现匹配机制. 3.对战模块 把两个匹配到的玩家放到同一个游戏房间中, 双方通…...
性能飙升50%,react-virtualized-list如何优化大数据集滚动渲染
在处理大规模数据集渲染时,前端性能常常面临巨大的挑战。本文将探讨 react-virtualized-list 库如何通过虚拟化技术和 Intersection Observer API,实现前端渲染性能飙升 50% 的突破!除此之外,我们一同探究下该库还支持哪些新的特性…...
颠覆传统:探索Web3对传统计算机模式的冲击
随着Web3技术的崛起,传统计算机模式正面临着前所未有的冲击与挑战。Web3作为下一代互联网的代表,以其去中心化、安全可信的特性,正在颠覆着传统计算机模式的种种假设和局限性。本文将深入探讨Web3对传统计算机模式的冲击,并探索其…...
最适合上班族和宝妈的兼职副业,一天500多,小众副业项目
近年来,地方特色小吃逐渐受到人们的热烈追捧,尤其是在直播的助力下,许多地方的特色小吃得以走进大众视野,吸引了大量流量和人气。因此,有很大一部分商家和创业者看准了这一商机,纷纷投身于地方特色小吃的制…...
HFish蜜罐实践:网络安全防御的主动出击
引言 随着网络攻击手段的不断演进,传统的被动防御策略已难以应对复杂多变的安全威胁。HFish蜜罐作为一种主动防御工具,通过模拟易受攻击的服务,吸引攻击者,不仅能有效捕获攻击行为,还能为安全分析和溯源提供宝贵信息。…...
vue3+three.js给glb模型设置视频贴图
1.在网上下载一个显示屏或者自己画一个,在blender中设置好显示屏的Mesh,UV设置好,这样方便代码中添加纹理贴图。可以让美术在建模软件中,先随机设置一张图片作为纹理,验证UV是否设置好 关于如何 在blender中给模型设置UV贴图百度很多的 // 视频 import * as THREE from…...
SCARA机器人中旋转花键的维护和保养方法!
作为精密传动元件的一种,旋转花键在工作过程中承受了较大的负荷。在自动化设备上运用广泛,如:水平多关节机械手臂(SCARA)、产业用机器人、自动装载机、雷射加工机、搬运装置、机械加工中心的ATC装置等,最适…...
Linux运维-服务器系统配置初始化脚本
方案一 ,是一个简化的Linux服务器初始化脚本 下面这个是一个简化的Linux服务器初始化脚本示例,它包括了更新软件包、安装常用工具、配置网络和安全设置等基本步骤:这个脚本提供了一个基本的初始化配置示例,包括软件更新、安装工具…...
暑期来临,AI智能视频分析方案筑牢防溺水安全屏障
随着夏季暑期的来临,未成年人溺水事故频发。传统的防溺水方式往往依赖于人工巡逻和警示标识的设置,但这种方式存在人力不足、反应速度慢等局限性。近年来,随着视频监控智能分析技术的不断发展,其在夏季防溺水中的应用也日益凸显出…...
【第3章】SpringBoot实战篇之登录接口(含JWT和拦截器)
文章目录 前言一、JWT1. 什么是JWT2. 使用场景3. 结构3.1 Header3.2 Payload3.3 Signature 4. 使用 二、案例1.引入库2.JwtUtils3. UserController14. ArticleController 三、拦截器1. 定义拦截器2. 注册拦截器 四、测试1. 登录2. 无token3. 有token4. 全局配置 总结 前言 前面…...
vue el-table使用、el-popover关闭、el-image大图预览
1、html <el-table :data"list" :header-cell-style"{ background: #F7F8F9 }"><el-table-column type"index" width"100px" label"序号"></el-table-column><el-table-column prop"pic" l…...
星网智云总经理韦炜:低代码与智能制造融合,探索未来制造的无限可能
下文为广西星网智云总经理韦炜的演讲全文: 大家下午好,今天给大家分享一下玉柴的数字化转型过程,以及整个过程中我们会怎样使用低代码。 ﹀ ﹀ ﹀ #玉柴数字化战略 #两个要点 我们的数字化,是在公司的整一个战略转型下去做的。…...
3d模型批量渲图总是会跳怎么办?---模大狮模型网
在进行3D模型批量渲染时,有时会遇到一些问题,其中一个常见的问题就是渲染过程中出现跳帧或者跳图的情况。这不仅会影响到效率,还可能导致输出结果不符合预期。本文将介绍几种解决这一问题的方法,帮助读者更好地应对3D模型批量渲图…...
【距离四六级只剩一个星期!】刘晓艳四级保命班课程笔记(2)(可分享治资料~)
这一节是专门的听力课程,众所周知,咱们刘晓艳刘老师的口语不是特别的突出,当然口才是一流的☝️。 文章目录 听力预判听前预判 听力过程八大出题关键点视听一致同义转换 听完一道题后平时练习精听步骤 听力预判 听前预判 画关键词ÿ…...
Java之Enum枚举类实践
概述 项目中涉及到很多不变的业务变量,因此我们采用了Enum类来定义相关变量,采用Enum的原因 性能高,常量值的地址唯一,可以直接使用 来判断 完全单例,线程安全 项目实践 package com.bierce;/*** 审核流传状态枚举类*/ public enum FlowTypeEnum {START("开始"…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
