动态下拉列表之高级段位:智能匹配,精准打击,要的就是这种丝滑

人都一样 , 懒了还想懒 。到了中级段位以后,还是不满足,一方面是因为名称管理器里装满了名称,显得有些杂乱;另一方面,这种方式设置下拉列表 , 还要翻到参数表去看OFFSET的坐标路线 , 尤其是向右行军的步数 , 总是显得不那么智能,也不够高大尚 。怎么才能让函数充分发挥出它的智能作用呢?

切中要害,找出解决问题的关键

我们来思考下面两个问题:
  1. 能不能根据“工作表”中下拉列表所在列的字段名,让EXCEL自己去“参数表”去查向右行军的步数呢(当然工作表列所在字段名要与参数表中相应的字段名必须一致)?
  2. 如何让EXCEL自己抓取下拉列表所在列的字段名呢?
这两个问题如果都解决了,我们就解决了自动获取到上期公式OFFSET的第二个参数=OFFSET(参数表!$A$1,1,3,COUNTA(OFFSET(参数表!$A$1,1,3,20,1)),1),是不是一条公式就解决了所有下拉列表的设置了,而且名称管理器里只要存一个名称“下拉列表”就可以了 。
下面我我们来介绍一个新兵出?。?

众里寻她千百度,得来全不费功夫,特种侦察兵MATCH

【名 片】姓名MATCH,特种侦察兵 。函数军事学院特种侦察系测绘专业毕业,擅长敌后渗透,寻踪觅迹 , 向后方输送相对位置坐标数据,战绩卓著,相当年与OFFSET/INDEX等配合,打了不少漂亮仗,立功无数 。
【官方释义】MATCH(lookup_value, lookup_array, [match_type])
  • lookup_value必需参数 , 需要在 lookup_array 中查找的值 。例如 , 如果要在电话簿中查找某人的电话号码,则应该将姓名作为查找值,但实际上需要的是电话号码 。lookup_value 参数可以为值(数字、文本或逻辑值)或对数字、文本或逻辑值的单元格引用 。
  • lookup_array必需参数,要搜索的单元格区域 。
  • match_type可选参数,数字 -1、0 或 1 。match_type 参数指定 Excel 如何在 lookup_array 中查找 lookup_value 的值 。此参数的默认值为 1 。
【坊间释义】MATCH(找谁?哪找?咋找?) , MATCH 函数可在单元格区域中搜索指定项,然后返回该项在单元格区域中的相对位置 。

解决第一个问题:假如知道了下拉列表所在列的字段名,如何得到OFFSET右行军的步数

  1. 假如我们已经知道,设置下拉列表所在列的字段名为“血型” , 我们其实就可以派我们的特种侦察兵出场了,战术动作分解为MATCH(找“血型”,在参数表第一行A1:Z1中找 , 精确匹配),即:MATCH(“血型”,参数表!$A$1:$Z$1,0) 。
  2. 由于MATCH是在A1:Z1这个区域内返回“血型”的相对位置 , 它是从A1开始计数的,找到“血型”正好是4;而OFFSET右行军虽然从第一列开始 , 但它是以跨步计数的,第3步就到了 。所以由于计数方式不一样,尽管从同一列出发, MATCH返回的相对坐标数比OFFSET的行军步数多了1,所以只有减掉1,才能二者一致,也就是说MATCH(“血型”,参数表!$A$1:$Z$1,0)-1就是OFFSET右行军的步数 。

动态下拉列表之高级段位:智能匹配,精准打击,要的就是这种丝滑


解决第二个问题:如何让EXCEL自己抓取下拉列表所在列的字段名呢?

【动态下拉列表之高级段位:智能匹配,精准打击,要的就是这种丝滑】假如我们在工作表的G列设置下拉列表,那么G列的第一行就是字段名;如果在H列设置下拉列表,那么字段名就在H列的第一行 。也就是说字段名所在单元格行坐标为1,列坐标为COLUMN()(它是动的,在哪里设下拉列表,他就能求出那个单元格所在的列),字段名所在的单元格名称为ADDRESS(1,COLUMN()) , 我们再用INDIRECT函数引用一下这个单元格名称,也就得到了单元格里的内容,即字段名称 。
动态下拉列表之高级段位:智能匹配,精准打击,要的就是这种丝滑


战果汇总:合并所有公式存入名称 , 并设置下拉列表


动态下拉列表之高级段位:智能匹配,精准打击,要的就是这种丝滑


成果展示:要的就是这种丝滑


动态下拉列表之高级段位:智能匹配,精准打击,要的就是这种丝滑


如此这般,名称管理器里不再是满满名称,针对单级下拉列表,一条就够了 , 是不是够爽 。先找到解决问题的步骤,再去配置函数 , 最终的公式可能挺吓人,但分解一下再来看,不过尔尔 。

相关经验推荐